选择包含特定文本的webelement

时间:2017-04-23 21:31:22

标签: python python-2.7 selenium selenium-webdriver appium

我有多个具有相同资源ID的元素(它们都不在同一时间在屏幕上),所以我需要能够根据它们包含的文本选择它们。但是,部分文本偶尔会发生变化,对于每个元素,只会不断显示一小段文本。那么,如何在需要时选择每个元素呢?我试过了:

不幸的是,它会返回一个bool值,因此我无法点击'它:

    get_code = WebDriverWait(self.driver, 3).until(
    EC.text_to_be_present_in_element((By.ID, "android:id/big_text"), 'validation'))
    element.click()

这通常对我有用,但我需要包含contains(text(),' validation')而我无法找到这样做的方法:

    element = WebDriverWait(self.driver, 3).until(
    EC.element_to_be_clickable((By.ID, "android:id/big_text")))
    element.click()

也许这样的事情可行吗?

    element = WebDriverWait(self.driver, 3).until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="android:id/big_text" and contains(text(), "validation"]')))
    element.click()

但我不知道如何格式化它。任何其他建议。谢谢!

4 个答案:

答案 0 :(得分:0)

上次尝试中的括号错误,请尝试:

element = WebDriverWait(self.driver, 3).until(
EC.presence_of_element_located(By.XPATH, '//*[@id="android:id/big_text" and contains(text(), "validation")]'))
element.click()

答案 1 :(得分:0)

        element = WebDriverWait(self.driver, 3).until(
        EC.presence_of_all_elements_located((By.ID, "android:id/big_text")))
        element[0].click()

目前运作良好,现在......打开更好的选择。

答案 2 :(得分:0)

尝试以下方法。它应该工作。在appium客户端的xpath中实现text()与浏览器的selenium没有什么不同。

EC.presence_of_element_located(By.XPATH, "//*[@id='android:id/big_text' and contains(@text, 'validation')]")

OR

EC.presence_of_element_located(By.XPATH, "//*[@id="android:id/big_text" and contains(@text, "validation")]')

上述两个xpath之间的差异只是使用的引用类型。

答案 3 :(得分:0)

试试这个:

driver.find_element_by_name("text")

或者这个:

driver.find_element_by_link_text("text")
driver.find_element_by_partial_link_text('part_of_text')