我有多个具有相同资源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()
但我不知道如何格式化它。任何其他建议。谢谢!
答案 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')