我最终知道这一点,我确信答案很简单,但我无法弄清楚。
当我把它放在google Chrome的控制台中时,我有一个jquery选择器可以找到并完美地找到元素:
$(".answer__label:contains('Yes')")
现在我想用它来检索WebDriver测试中的元素,所以我以下列方式使用JavascriptExecutor:
private WebElement findByJSText(String text) {
String script = String.format("return ('.answer__label:contains('%s')')", text);
WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript(script);
return element;
}
这在括号中给出错误"缺失"。我已经看到了这个错误的引用,但似乎没有一个适用于我的情况。
如何按摩它以正确返回元素?
(请不要回复告诉我使用driver.findElement(By.linkText),谢谢)
附录
这是我的最终工作方法:
private WebElement findByJSText(String text) {
//String script = String.format("return $('.answer__label:contains('%s')')", text);
String script = String.format("return $(\".answer__label:contains('%s')\")[0]", text);
WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript(script);
return element;
}
我可以为css字符串添加第二个参数,以使其更加灵活。
谢谢大家的帮助!
答案 0 :(得分:3)
在这一行:
String script = String.format("return ('.answer__label:contains('%s')')", text);
你的javascript代码是错误的,jquery $
函数在哪里?正确的js代码应该是:
String script = String.format("return $('.answer__label:contains('%s')')", text);
另一个'
中有'
。多数民众赞成的问题,我尝试了以下js代码,它对我来说很好:
String script = String.format("return $(\".answer__label:contains('%s')\")", text);