我需要Selenium JavascriptExecutor通过jquery返回一个元素

时间:2014-09-12 06:58:21

标签: javascript webdriver

我最终知道这一点,我确信答案很简单,但我无法弄清楚。

当我把它放在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字符串添加第二个参数,以使其更加灵活。

谢谢大家的帮助!

1 个答案:

答案 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);