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']]
或者,如果您还需要前导和尾随空格,请尝试使用 xpath
的 normalize-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 节点。
我正在使用 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']]
或者,如果您还需要前导和尾随空格,请尝试使用 xpath
的 normalize-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 节点。