【问题标题】:Selenium - Finding xpath by text (td / tr)Selenium - 通过文本查找 xpath (td / tr)
【发布时间】:2018-12-14 03:06:57
【问题描述】:

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

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

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

我得到的最接近的是:

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

很遗憾,这找不到元素。

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

【问题讨论】:

  • <tr> 节点的文本和格式化的相关 HTML 更新问题。
  • 添加文本格式的html。

标签: python html selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

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

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

其中...tbody//td... 表示它将在tbody 的所有子节点td 中进行搜索。所以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

【讨论】:

    【解决方案2】:

    获取 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')]
    

    【讨论】:

    • 选项 2 效果不佳,因为 tr 没有直接文本
    【解决方案3】:

    我是 python selenium 的新手。我可以使用这一行打印td 中的文本

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

    在我的情况下,我想遍历行并单击行(tr)的第一列(td)中的链接,该链接在第三列(td)中包含文本“已创建” .

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 1970-01-01
      • 2020-07-30
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多