使用包含软连字符的文本进行 XPath 搜索

问题描述 投票:0回答:1
/div[contains(text(),"Inverter")]

这是我们当前使用 xpath 映射 selenium 中的一些对象的代码。现在的问题是,他们现在在代码中引入了软连字符,并且文本“Inverter”现在是“Inverter”。

我已经尝试过一些翻译和替换,但没能成功,所以它仍然可以找到它。

有谁知道我可以/应该如何调整我的 xpath 查询以便我可以继续进行文本映射?

我已经尝试过一些与翻译和替换相同的事情,但它似乎不起作用:

/div[contains(translate(text(),"\u00AD",""),"Inverter")]
/div[contains(translate(text(),"­",""),"Inverter")]
/div[contains(translate(text(),"-",""),"Inverter")]
selenium-webdriver xpath
1个回答
0
投票

您这里有两个问题:

  • 如何在 XPath 表达式中包含“软连字符”字符
  • 如何识别包含字符串的
    div
    元素

第一个取决于您的主机语言(JavaScript、Python、Java?您不说)。您最好的选择可能是将实际字符粘贴到代码中(尽管它可能不可见,因此值得添加注释,这样它就不会只是看起来是空字符串)。注意,

­
符号是 HTML 的一部分;如果您的代码是包含在 HTML 页面中的
<script>
元素中的 JS,则可能会起作用,但否则我不希望它起作用。它不是 XPath 的一部分。 XPath 1.0 中无法通过 Unicode 代码点或其他方式指定字符。

第二个问题是关于识别

div
。我假设您想要一个
div
,其中包含目标字符串,但这不是您的 XPath 所做的:

/div[contains(translate(text(),"-",""),"Inverter")]

请注意,其中的

text()
表达式是相对于
div
元素进行解释的;如果没有显式的轴说明符,它是
child::text()
的简写,因此它将仅包含作为
div
的直接子级的文本节点,并且不会包含嵌套在
p
或任何元素内的文本节点。另请注意,虽然
text()
表达式将返回所有子文本节点的集合,但在 XPath 1.0 中,
translate()
函数会通过获取这些文本节点的 first 的文本值,将该组文本节点转换为字符串。仅节点。

要搜索

text()
中的所有
div
节点,您可以使用以下表达式:

/div[contains(translate(descendant::text(),"-",""),"Inverter")]

或者更简单:您可以在整个

div
元素的字符串值中进行搜索:

/div[contains(translate(.,"-",""),"Inverter")]

这里的

.
指的是上下文节点,也就是
div

© www.soinside.com 2019 - 2024. All rights reserved.