使用Selenium GhostDriver中的JavascriptExecutor处理警报/确认

时间:2014-07-25 10:54:41

标签: java javascript selenium-webdriver phantomjs ghostdriver

我变得绝望了。我在Eclipse中使用了Selenium 2.42.2和带有Java的phantomjsDriver 1.1.0。对于我的测试,当我打开一个页面时,我必须识别并存储警报和确认以及提示的消息。 phantomjsDriver还没有实现它,所以我需要一个使用JavascriptExecutor的解决方法。但我是一个js菜鸟,无法独自管理它。这是我的代码和我尝试的内容:

DesiredCapabilities dcaps = new DesiredCapabilities();
String[] phantomArgs = new  String[] {
        "--webdriver-loglevel=NONE"};
dcaps.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
dcaps.setCapability(CapabilityType.SUPPORTS_ALERTS, true);
dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, 
        phantomjs.getAbsolutePath());
dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, phantomArgs);
dcaps.setJavascriptEnabled(true);
WebDriver driver = new PhantomJSDriver(dcaps);

JavascriptExecutor js=(JavascriptExecutor) driver;
String script = "window.confirm = function(message) {"+
        "document.lastConfirmationMessage = message; return true; }";
js.executeScript(script);
driver.get("http://www.mysiteWithConfirm.de"); 
Object message = js.executeScript("return document.lastConfirmationMessage");

当我打开我的网站时,会立即打开确认提示,因此我知道有确认。但我只是得到例外

  

错误讯息=> '无法找到变量:lastConfirmationMessage'

1 个答案:

答案 0 :(得分:2)

我认为没有办法按照你尝试的方式来解决它。 PhantomJDrvier(GhostDriver)API目前尚不支持警报处理(here is the open issue for in GitHub

可能的解决方法是重写window.alert,以便将日志输出到控制台。 使用ALERT标签,您可以将控制台中的警报消息日志与其他日志区分开来。

page.evaluate(function() {
    window.alert = function(str) {
        console.log("ALERT:" + str);
    }
});

page.onConsoleMessage(function(message, lineNumber, sourceId) {
    if(/^ALERT:/.test(message)) {
       //do something with message
    }
});

基于此discussion的答案。

相关问题