我正在使用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
答案 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"
来修剪源代码中可能存在的空格。