Selenium webdriver 铬驱动无头警报
我对chromedriver的selenium webdriver测试有这个问题。虽然我可以在使用Chrome浏览器时成功地运行测试,但我不能在headless模式下运行相同的测试 我无法处理Js警报。事实上,在截图时,警报似乎甚至不会弹出 我尝试了几种变通方法: 1)Selenium webdriver 铬驱动无头警报,selenium-webdriver,selenium-chromedriver,google-chrome-headless,Selenium Webdriver,Selenium Chromedriver,Google Chrome Headless,我对chromedriver的selenium webdriver测试有这个问题。虽然我可以在使用Chrome浏览器时成功地运行测试,但我不能在headless模式下运行相同的测试 我无法处理Js警报。事实上,在截图时,警报似乎甚至不会弹出 我尝试了几种变通方法: 1) driver.window\u句柄-->似乎不存在其他窗口 2) driver.execute_脚本(“window.confirm=function(){return true;}”)-->该脚本没有任何更改 3) elem
driver.window\u句柄
-->似乎不存在其他窗口
2) driver.execute_脚本(“window.confirm=function(){return true;}”)
-->该脚本没有任何更改
3) element=WebDriverWait(driver,20)。直到(EC.alert\u存在())
当然还有显式等待
在浏览器模式下,我使用一个普通的:
try:
print driver.switch_to.alert.text
driver.switch_to.alert.accept()
except NoAlertPresentException as e:
print("no alert")
还有人在无头模式下出现警报时遇到此问题吗
- 铬驱动v.2.30.477691
- Chrome版本59.0.3071.115
- 运行无头chrome时,我似乎也遇到了同样的问题。
根据屏幕截图,不会弹出警报窗口。它可以在铬合金上使用,但不能在无头铬合金上使用
我在chrome 60.0.3112.72上运行
和chrome驱动程序2.30
因为无头chrome会自动丢弃警报。
选中此项:
顺便说一句,为什么你可以在Chrome59无头模式下进行屏幕截图?chrome 59有一个缺陷,它使每个屏幕快照在无头模式下都是1x1像素的图像,因此我升级到chrome 60。由于chrome headless(当前)不支持警报,您必须对
警报()
和确认()
方法进行monkeypatch。这是我(在C#)中使用的方法:
在Chrome61上仍然存在这个问题,所以我花了一段时间寻找一个不同的解决方案。由于其简单性,我最喜欢在显示警报之前注入javascript,以便自动接受警报 只需将以下代码行放在导致显示警报的行之前:
driver.ExecuteJavaScript("window.confirm = function(){return true;}");
适用于headless chrome和PhantomJS。只是想添加此功能,以防有人使用NightwatchJS遇到此问题 上述被接受的解决方案对我来说是可行的,但使用JS时,需要对其稍作修改
driver.ExecuteJavaScript("window.confirm = function(){return true;}");
我需要把它改成
// this.api.perform() in my case is the same as browser.perform()
this.api.perform(function () { this.confirm = function () { return true; }})
我不知道,但这对我有用
driver.save_屏幕截图(“ss.png”)
但让我们先关注主题,这一点至关重要。所以大家把这一行放在元素之前。单击()
,只需为python添加do驱动程序。执行_脚本(“window.confirm=function(){return true;}”)代码>大家好,我有同样的情况,在无头模式下,弹出窗口无法识别。试图遵循上述代码。但使用“ExecuteJavaScript”会导致错误。我做错什么了吗?它是用户定义的函数吗?如果这正是我需要编写的代码。如果我这样做,我正确吗,((JavascriptExecutor)driver).executeScript(“window.confirm=function(){return true;}”);它的工作原理应与上述完全相同(使用硒和C#)。你第二条评论中的代码对我来说毫无意义。可能您丢失了某个引用或使用?我遇到了这个问题,使用NightwatchJS(this.api在本例中与browser.perform()相同):this.api.perform(function(){this.confirm=function(){return true;}})
driver.ExecuteJavaScript("window.confirm = function(){return true;}");
// this.api.perform() in my case is the same as browser.perform()
this.api.perform(function () { this.confirm = function () { return true; }})