Selenium webdriver 铬驱动无头警报

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

我对chromedriver的selenium webdriver测试有这个问题。虽然我可以在使用Chrome浏览器时成功地运行测试,但我不能在headless模式下运行相同的测试

我无法处理Js警报。事实上,在截图时,警报似乎甚至不会弹出

我尝试了几种变通方法:

1)
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; }})