Selenium - 通过文本查找 xpath (td / tr)

新手上路,请多包涵

我有一个很大的 HTML 电子邮件表,我试图找到特定电子邮件的名称,然后在该元素中选择一个按钮。我可以通过 XPATH 轻松找到表体:

 //*[@id="reportList"]/tbody

那么在这个表中有多个行(tr),是否可以在所有表行中搜索文本?

我得到的最接近的是:

 driver.find_element(By.XPATH, '//*[@id="reportList"]/tbody[contains(text(), "example text")]')

不幸的是,这无法找到该元素。

html代码

我知道我可以简单地复制要定位的特定 tr 的 XPATH,但是出于自动化目的,我试图传递一个字符串,然后在所有 tr 中搜索我的特定文本。

原文由 Michael Blair 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 562
2 个回答

据我所知,表有 trtd ,可能你需要 td 。所以 xPath 可能是这样的:

 driver.find_element(By.XPATH, "//*[@id='reportList']/tbody//td[contains(text(), 'example text')]")

其中 ...tbody//td... 意味着它将在所有子节点 td 中搜索 tbody 。所以 td 不应该是 tbody

PS 我还要添加 wait 方法以确保该元素存在:

 # will wait up to 10 seconds until element will be present on the page
element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//*[@id='reportList']/tbody//td[contains(text(), 'example text')]"))
    )

注意:你必须做一些导入:

 from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

原文由 Andrei Suvorkov 发布,翻译遵循 CC BY-SA 4.0 许可协议

获取 xpath 的三个选项:

 XPATH= //*[@id='reportList']//*[contains(text(), 'example text')]

如果您的文字带有 tr:

 XPATH= //*[@id='reportList']/tbody//tr[contains(text(), 'example text')]

如果您的文字带有 td:

 XPATH= //*[@id='reportList']/tbody//tr//td[contains(text(), 'example text')]

原文由 Ankit Gupta 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题