我在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("'", "\\\'") + "')]"));
,则该错误会再次出现。
有人知道该怎么做吗?感谢您的帮助。
答案 0 :(得分:2)
使用String.format
通过以下方式构建xpath:
WebElement elem = findElement(By.xpath(String.format("//*[contains(.,\"%s\")]", arg)));
有关String.format的更多信息,请查看它的documentation。 格式参数可以在here中找到。
'
WebElement elem = findElement(By.xpath(String.format("//*[contains(.,\"%s\")]", arg)));
"
WebElement elem = findElement(By.xpath(String.format("//*[contains(.,'%s')]", arg)));
'
和"
使用"
在arg中转义所有arg.replace("\"", """);
,并像构建您的Xpath
WebElement elem = findElement(By.xpath(String.format("//*[contains(.,\"%s\")]", arg)));