【问题标题】:xpath selector tr given list of dataxpath 选择器 tr 给定的数据列表
【发布时间】:2017-03-02 12:45:02
【问题描述】:

我正在使用 selenium webdriver 自动化 Web 系统,在多种情况下,我需要在网页的一行 (tr) 中声明给定的数据。

例如,我需要断言系统中有一行 (tr) 包含这些数据: 数据 1、数据 2、数据 3、数据 4

我的页面结构如下:

<tr>
    <td>Data 1</td>
    <td>Data 2</td>
    <td>Data 3</td>
    <td><span class='something'>Data 4</span></td>
<tr>

我写了这个 xpath 希望它能返回表格行:

.//tr[td[text()='Data 1']]/parent::tr/td[text()='Data 2']/parent::tr/td[text()='Data 3']/parent::tr/td[text()='Data 4']

Data 3 之前有效,但在数据 4 中无效

【问题讨论】:

标签: selenium xpath css-selectors cucumber


【解决方案1】:

我想要一个通用的解决方案,可以匹配我的 td 内的任何级别

您应该尝试using . instead of text(),这将是一个通用解决方案,如下所示:-

.//tr[td[.='Data 1'] and td[.='Data 2'] and td[.='Data 3'] and td[.='Data 4']]

或者,如果您还想要前导和尾随空格,请尝试使用xpathnormalize-space() 函数,如下所示:-

.//tr[td[normalize-space()='Data 1'] and td[normalize-space()='Data 2'] and td[normalize-space()='Data 3'] and td[normalize-space()='Data 4']]

【讨论】:

    【解决方案2】:

    它不起作用,因为在第 4 个 &lt;td&gt; 中嵌入了一个 &lt;span&gt; 元素。

    你应该试试

    .//tr[td[text()='Data 1']]/.../parent::tr/td[.='Data 4']
    

    .//tr[td[text()='Data 1']]/.../parent::tr/td[span[text()='Data 4']]
    

    【讨论】:

    • 知道了,但我无法预料里面是否会有包含我的数据的标签,所以我想要一个通用的解决方案,可以匹配我的 td 内的任何级别
    • 在这种情况下使用点 (.) 而不是 text()
    【解决方案3】:

    尝试使用此 XPath,我认为它适用于您的情况:

    .//tr[.//*[.='Data 1'] and [.='Data 2'] and [.='Data3'] or [.='Data 4']]
    

    它将搜索具有包含这些文本的子节点的 tr 节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 2020-03-05
      • 2013-01-01
      相关资源
      最近更新 更多