在Selenium中按xpath查找包含引号的文本

时间:2019-12-11 13:53:19

标签: selenium xpath findelement

我在Selenium(Java)中遇到一个错误:

  

无法使用xpath表达式定位元素   // * [包含(。,'字段SomeField必须为字符串或数组类型   最大长度为“ 60”。)]

显然,有两个createRequest破坏了表达式。所以我把代码从

ClientHttpRequestFactory

'

他们都没有工作。现在,我通过执行以下操作暂时解决该问题:

WebElement elem = findElement(By.xpath("//*[contains(.,'" + arg + "')]"));

但是,如果arg中包含WebElement elem = findElement(By.xpath("//*[contains(.,'" + arg.toString().replace("'", "\'") + "')]")); WebElement elem = findElement(By.xpath("//*[contains(.,'" + arg.toString().replace("'", "\\'") + "')]")); WebElement elem = findElement(By.xpath("//*[contains(.,'" + arg.toString().replace("'", "\\\'") + "')]")); ,则该错误会再次出现。

有人知道该怎么做吗?感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

使用String.format通过以下方式构建xpath:

WebElement elem = findElement(By.xpath(String.format("//*[contains(.,\"%s\")]", arg)));

有关String.format的更多信息,请查看它的documentation。 格式参数可以在here中找到。


arg只能包含'

WebElement elem = findElement(By.xpath(String.format("//*[contains(.,\"%s\")]", arg)));

arg只能包含"

WebElement elem = findElement(By.xpath(String.format("//*[contains(.,'%s')]", arg)));

arg可以同时包含'"

使用"在arg中转义所有arg.replace("\"", """);,并像构建您的Xpath

WebElement elem = findElement(By.xpath(String.format("//*[contains(.,\"%s\")]", arg)));