在Selenium GhostDriver中使用JavascriptExecutor处理Alert/Confirm

3

我感到绝望。我正在使用Selenium 2.42.2和phantomjsDriver 1.1.0,在Eclipse中使用Java。对于我的测试,识别和存储警报、确认和可能的提示消息是至关重要的,当我打开一个页面时。然而,phantomjsDriver尚未实现它,因此我需要通过JavascriptExecutor进行变通。但我是一个JavaScript新手,无法独立完成。以下是我的代码和我尝试过的内容:

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个回答

2
我认为你尝试的方法无法解决它。PhantomJDrvier(GhostDriver)API目前还不支持警报处理(这里是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
    }
});

基于我在讨论中的回答。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接