通过子文本选择节点

时间:2019-06-21 07:37:18

标签: selenium testing xpath automated-tests

我想使用XPath选择元素[@class='title']

<span class="title">Private Area</span>
<span class="title"><mark>Ablage für Tests</mark></span>
<span class="title">Zweite <mark>Ablage für Tests</mark></span>

对于三个示例(其中文本可以更改),我都需要一个XPath。我尝试了//*[@class='title'][text()='TEXT'] ->仅适用于第一个示例,不适用于其他示例。

2 个答案:

答案 0 :(得分:1)

我要去:

//span[@class='title']/descendant-or-self::*[text()='SOME TEXT']

这将找到span元素,然后在树上进行查找以查找具有与指定文本匹配的文本节点的元素。

您遇到的问题是,在示例2和3中,以下两种方法均适用:

//span[@class='title']/descendant-or-self::*[text()='Ablage für Tests']

您可以通过

解决此问题
(//span[@class='title']/descendant-or-self::*[text()='Ablage für Tests'])[1]
(//span[@class='title']/descendant-or-self::*[text()='Ablage für Tests'])[2]

请记住,文本节点属于特定元素,text()不是一组元素的文本。

我也不清楚您要查找哪个元素,上面的假设是您希望该元素包含指定的文本。相反,如果您正在寻找span元素,则可以将XPath修改为:

//span[@class='title'][descendant-or-self::*[text()='SOME TEXT']]

答案 1 :(得分:1)

尝试以下xpath。只需更改要获取的文本即可。

"//span[@class='title'][contains(.,'" + TEXT + "')]"