一尘不染

如何在Selenium WebDriver Java中使用JavaScript

javascript

我想使用Java将JavaScript与WebDriver(Selenium 2)一起使用。

我遵循了一些指南,第一行有一条指令以如下方式运行:

$ ./go webdriverjs

我的问题:上述命令将从哪个文件夹/位置运行/执行?


阅读 288

收藏
2020-05-01

共1个答案

一尘不染

基于您先前的问题,我想您想从Java的Java运行JavaScript代码段WebDriver。如果我错了,请纠正我。

WebDriverJs实际上是“公正”另一WebDriver语言绑定(您可以用Java编写,C#,红宝石,Python和JS甚至可能更多的语言,截至目前你的测试)。特别是JavaScript,它使您可以用JavaScript编写测试。

如果要在Java中运行JavaScript代码WebDriver,请执行以下操作:

WebDriver driver = new AnyDriverYouWant();
if (driver instanceof JavascriptExecutor) {
    ((JavascriptExecutor)driver).executeScript("yourScript();");
} else {
    throw new IllegalStateException("This driver does not support JavaScript!");
}

我也喜欢这样做:

WebDriver driver = new AnyDriverYouWant();
JavascriptExecutor js;
if (driver instanceof JavascriptExecutor) {
    js = (JavascriptExecutor)driver;
} // else throw...

// later on...
js.executeScript("return document.getElementById('someId');");

您可以在文档中,或者最好在的JavaDocs中JavascriptExecutor找到与此有关的更多文档。

executeScript()需要函数调用和原材料JS了。您可以从中获得return一个值,并且可以向其传递许多复杂的参数,例如一些随机示例:

// returns the right WebElement
// it's the same as driver.findElement(By.id("someId"))
js.executeScript("return document.getElementById('someId');");
// draws a border around WebElement
WebElement element = driver.findElement(By.anything("tada"));
js.executeScript("arguments[0].style.border='3px solid red'", element);
// changes all input elements on the page to radio buttons
js.executeScript(
        "var inputs = document.getElementsByTagName('input');" +
        "for(var i = 0; i < inputs.length; i++) { " +
        "    inputs[i].type = 'radio';" +
        "}" );
2020-05-01