xpath 选择器 tr 给定的数据列表

xpath selector tr given list of data

我正在使用 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 希望它会 return table 行:

.//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 中无效

它不起作用,因为第 4 个 <td> 中嵌入了一个 <span> 元素。

你应该试试

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

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

I would want a solution that is generic in point of match any level inside my td

您应该尝试 ,这是一个通用的解决方案,如下所示:-

.//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']]

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

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

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