【问题标题】:Click on specific link in table row单击表格行中的特定链接
【发布时间】:2014-06-24 13:16:06
【问题描述】:

我正在 Firefox 中使用 Selenium Webdriver 进行测试,理想情况下也在 IE8 中进行测试。

这是我的 html 结构:

<table id="table">
<tbody>
    <tr>
        <td>Text1</td>
        <td><a id="assign" href="/assign/1>Assign</a></td>
    </tr>
    <tr>
        <td>Text2</td>
        <td><a id="assign" href="/assign/2>Assign</a></td>
    </tr>
    <tr>
        <td>Text3</td>
        <td><a id="assign" href="/assign/3">Assign</a></td>
    </tr>
</tbody>
</table>

基本上我需要做的是:
点击包含Text1的行上的assign链接

到目前为止,我想出了选择所有分配链接的 XPATH://*[@id='table']//tr/td//following-sibling::td//following-sibling::td//following-sibling::td//a。将其更改为 //*[@id='table']//tr/td[text='Text1']//following-sibling::td//following-sibling::td//following-sibling::td//a 会从 Firebug 中返回“无匹配节点”。

但是,我想要一个 CSS 选择器。所以,我尝试了#table&gt;tbody&gt;tr:contains('Text1'),但 Firebug 返回“无效的 CSS 选择器”。

有什么建议吗?

【问题讨论】:

  • 也许您可以使用属性选择器,其中 href 是属性:[href="/assign/1"]
  • @Qaz 如果我不需要检查文本,我可以简单地执行 #assign.click 或类似的操作,但我需要知道先点击哪个链接。

标签: css selenium xpath selector


【解决方案1】:

你应该找到td前面有td兄弟标签和Text1文本,然后得到a标签:

//table[@id="table"]//td[preceding-sibling::td="Text1"]/a[@id="assign"]

【讨论】:

  • //table[@id="table"]//td 选择我的 tds。 //table[@id="table"]//td[preceding-sibling::td="Text1"] 在 Firebug 中返回“没有匹配的节点”。
  • @Ciuclpgfmk 好吧,在对您提供的输入给出答案之前,我已经测试了 xpath - 它对我有用..
  • @Ciuclpgfmk 你能检查一下吗://table[@id="table"]//td[normalize-space(preceding-sibling::td/text())="Text1"]?
  • 我设法通过使用 //table[@id='table']//tr//td[contains(text(), 'Text1')]/..// 选择了链接一种。感谢您的帮助@alecxe!
  • @Ciuclpgfmk 哦,是的,contains 也可以工作。感谢分享。另外,如果您认为值得,请考虑接受答案。
【解决方案2】:

或者,您可以找到 'tr''td'text = 'Text1',然后在 'tr' 中找到 'td' 并带有文本“分配”

//table[@id='table']//tr[td[.='Text1']]/td[.='Assign']

关于 css 选择器,没有纯 css 选择器用于基于文本的搜索。 'contains' 尚未标准化,因此可能不适用于您的情况。

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 2020-11-04
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多