Java 使用Selenium Webdriver实现无头/无头自动化
我想通过在无头模式下运行浏览器,在我的低规格Windows设备上节省一些资源。据我所知,+是将此类任务与Selenium Webdriver一起使用的标准选择。但是,在尝试之后,立即遇到了警报处理方面的问题。具体而言,将返回以下异常:Java 使用Selenium Webdriver实现无头/无头自动化,java,selenium,selenium-webdriver,phantomjs,headless-browser,Java,Selenium,Selenium Webdriver,Phantomjs,Headless Browser,我想通过在无头模式下运行浏览器,在我的低规格Windows设备上节省一些资源。据我所知,+是将此类任务与Selenium Webdriver一起使用的标准选择。但是,在尝试之后,立即遇到了警报处理方面的问题。具体而言,将返回以下异常: [ERROR - 2016-08-01T04:24:24.894Z] RouterReqHand - _handle.error - {"name":"Invalid Command Method"," . . . "} 由于执行以下操作时不支持getAlert
[ERROR - 2016-08-01T04:24:24.894Z] RouterReqHand - _handle.error - {"name":"Invalid Command Method"," . . . "}
由于执行以下操作时不支持getAlertText
WebDriver命令
:
Alert alert = driver.switchTo().alert();
特别是在EventFiringWebDriver
中实现的此方法:
public Alert alert() {
return targetLocator.alert();
}
我正在寻找替代方法或可行的解决方法。有人吗?我可以通过直接使用JavaScript执行警报处理来解决这个问题,如下所示:
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
jsExecutor.executeScript("window.alert = function(){}");
jsExecutor.executeScript("window.confirm = function(){return true;}");
目前,似乎无法通过PhantomJS的
WebDriver
接口直接执行该操作。我已经能够通过直接使用JavaScript执行警报处理来解决这个问题,如下所示:
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
jsExecutor.executeScript("window.alert = function(){}");
jsExecutor.executeScript("window.confirm = function(){return true;}");
目前,似乎没有办法通过PhantomJS的
WebDriver
界面直接执行该操作。什么是PhantomJS似乎不支持的??这只是意味着警报将不会由驱动程序本身处理。您需要切换到警报并根据您的选择接受或取消…@SaurabhGaur我的意思是getAlertText
WebDriver命令在内部不受支持,将返回异常。请参阅我的编辑。您调用了错误的方法。它是alert.getText()代码>取而代之……:)什么意思似乎不受PhantomJS支持??这只是意味着警报将不会由驱动程序本身处理。您需要切换到警报并根据您的选择接受或取消…@SaurabhGaur我的意思是getAlertText
WebDriver命令在内部不受支持,将返回异常。请参阅我的编辑。您调用了错误的方法。它是alert.getText()代码>而不是..:)如果您在无头模式下运行chrome canary,也可以解决此问题,谢谢!另外,如果您在无头模式下运行chrome canary,也可以提供解决方案,谢谢!