XPath在跨度后访问文本

时间:2018-10-19 06:56:30

标签: xpath robotframework

我正在使用Robot Framework尝试访问动态表中的元素。我试图单击“ TestAuto”文本,该文本将导致我进入另一个页面,但是我遇到了很大的困难。当代码中包含“ span”时,我总是很努力。希望有人能给我一个创建正确的xpath的指针。谢谢。

以下是示例代码:

<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>

<div class="col-sm-2">
<table>
<tbody>
<tr data-tryxpath-element="0">
<td class="st-m3">
<span class="bongobongo">Name:</span>
TestAuto
<br>
<span class="bongoemail">Email:</span>
bongo@mail.com
<br>
<span class="bongotel">Phone:</span>
+1234567890
</td>
</tbody>
</table>
<table>
<tbody>
<tr data-tryxpath-element="0">
<td class="st-m3">
<span class="bongobongo">Name:</span>
TestManual
<br>
<span class="bongoemail">Email:</span>
bongo123@mail.com
<br>
<span class="bongotel">Phone:</span>
+1234567891
</td>
</tbody>
</table>
</div>
</body>
</html>

我尝试了以下xpath并获得了负面结果:

//div/table/tbody/tr/td[starts-with(@class,'table borderless mobile-list')] --> Useless anyway as it does not help to identify "TestAuto"
//div/table/tbody/tr/td//text()="TestAuto" --> Both tables are selected
//div/table/tbody/tr/td[normalize-space()='TestAuto'] --> Both tables are selected
//div/table/tbody/tr/td/span/following::text()="TestAuto" --> Both tables are selected

1 个答案:

答案 0 :(得分:3)

在同一父级下<span>之后的任何文本节点:

//div/table/tbody/tr/td/span/following-sibling::text()

在同一父级下的"TestAuto"之后,值为<span>的任何文本节点:

//div/table/tbody/tr/td/span/following-sibling::text()[. = "TestAuto"]

在同一父级下的"TestAuto"之后,值为<span>的任何 first 文本节点:

//div/table/tbody/tr/td/span/following-sibling::text()[1][. = "TestAuto"]

在同一父级下紧随"TestAuto"之后,值为<span> 立即的任何文本节点:

//div/table/tbody/tr/td/span/following-sibling::node()[1][self::text() and . = "TestAuto"]

...仅在<table>下的第一个<div>中(如果有多个<div>,则仍然是多个匹配项!):

//div/table[1]/tbody/tr/td/span/following-sibling::text()[1][. = "TestAuto"]

...仅是整个文档中的第一个匹配项(最大匹配项):

(//div/table/tbody/tr/td/span/following-sibling::text()[1][. = "TestAuto"])[1]

注意,您可能必须使用normalize-space(.) = "TestAuto"而不是. = "TestAuto"来修剪源代码中可能存在的空格。