Ghostdriver 1.2.1 + PhantomJS 2.0 +最新的Selenium在Java中找不到变量错误

use*_*180 10 javascript java selenium phantomjs ghostdriver

((JavascriptExecutor) driver).executeScript("arguments[0].click();", buttonToClick);
Run Code Online (Sandbox Code Playgroud)

^域名故意编辑.

根据无法找到变量 - PhantomJS这个错误与没有正确执行Javascript的执行有关.我不明白这在我的Java程序的上下文中意味着什么.

我的Selenium程序只有一种Javascript调用,它的工作原理如下:

String[] cli_args = new String[]{"--debug=false", "--web-security=false", "--ssl-protocol=any", "--ignore-ssl-errors=true"};
        DesiredCapabilities caps = DesiredCapabilities.phantomjs();
        caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cli_args);
        caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "/Users/richard/Downloads/phantomjs-2.0.0-macosx/bin/phantomjs");
        driver = new PhantomJSDriver(caps);
Run Code Online (Sandbox Code Playgroud)

上面的这一行似乎不是问题,因为从我的测试中我可以看到像上面这样的多行在遇到上述错误之前执行没有错误.

此外,Session.NegotiatedCapabilities有"acceptSslCerts":false,我无法使用此代码块作为PhantomJS驱动程序初始化程序解决:

Jan 16, 2016 6:23:40 AM org.openqa.selenium.phantomjs.PhantomJSDriverService <init>
INFO: arguments: [--web-security=no, --ignore-ssl-errors=yes, --webdriver=33238, --webdriver-logfile=/Users/richard/YeezyBot/phantomjsdriver.log]
Run Code Online (Sandbox Code Playgroud)

我可以看到参数是在控制台上传递的......

((JavascriptExecutor) driver).executeScript("arguments[0].click();", buttonToClick);
Run Code Online (Sandbox Code Playgroud)

最后,一切都适用于Firefox WebDriver.

Tal*_*gel 0

将 JavaScript 注入网页或任何其他元素是不好的做法。您可以使用 Selenium 代码找到该元素并单击它,而无需使用任何注入。

  1. 等待页面加载

  2. 通过CSS或Xpath表达式查找按钮

  3. 等待元素变为可点击状态

  4. 仅使用 Selenium 代码单击它

    WebDriverWait 等待 = new WebDriverWait(driver, timeToWait);

    这.by = by;

    尝试 {

    webElement lastFoundElement = wait.until(ExpectedConditions.visibilityOfElementLocated(by));

    wait.until(ExpectedConditions.elementToBeClickable(lastFoundElement ));

    new Actions(浏览器).moveToElement(element, offsetX, offsetY).click().build().perform();

    } catch (异常前) {
    }