【问题标题】:selenium chromedriver prevent unexpected alert open: {Alert text : }selenium chromedriver 防止意外警报打开:{警报文本:}
【发布时间】:2018-04-16 01:42:29
【问题描述】:

我正在尝试阻止此警报,

Traceback (most recent call last):
  File "app.py", line 171, in <module>
    main()
  File "app.py", line 109, in main
    clipper = driver.find_elements_by_css_selector("div.btn")
  File "/home/blaster/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 605, in find_elements_by_css_selector
    return self.find_elements(by=By.CSS_SELECTOR, value=css_selector)
  File "/home/blaster/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 983, in find_elements
    'value': value})['value'] or []
  File "/home/blaster/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/home/blaster/.local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 241, in check_response
    raise exception_class(message, screen, stacktrace, alert_text)
selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: None
Message: unexpected alert open: {Alert text : }
  (Session info: headless chrome=65.0.3325.181)
  (Driver info: chromedriver=2.35.528139 (47ead77cb35ab2a9a23218b282151362a66cd662),platform=Linux 4.4.0-116-generic x86_64)

我尝试过使用(来自this answer):

driver.execute_script("window.alert = function() {};")

但它不起作用,谢谢!

【问题讨论】:

    标签: python selenium dom selenium-chromedriver


    【解决方案1】:

    错误说明了一切:

    selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: None
    Message: unexpected alert open: {Alert text : }
      (Session info: headless chrome=65.0.3325.181)
      (Driver info: chromedriver=2.35.528139 (47ead77cb35ab2a9a23218b282151362a66cd662),platform=Linux 4.4.0-116-generic x86_64)
    

    您的主要问题是您使用的二进制文件之间的版本兼容性,如下所示:

    • 您正在使用 chromedriver=2.35
    • chromedriver=2.35 的发行说明明确提及以下内容:

    支持 Chrome v62-64

    • 您正在使用 chrome=65.0
    • ChromeDriver v2.37 的发行说明明确提及以下内容:

    支持 Chrome v64-66

    • 我们不知道您的 Selenium 客户端 版本。

    所以 ChromeDriver 版本 (v2.35) 和 Chrome 浏览器 版本 (v65. 0)

    解决方案

    • 将Selenium升级到当前级别Version 3.11.0。
    • 将 ChromeDriver 升级到当前的ChromeDriver v2.37 级别。
    • 将 Chrome 版本保持在 Chrome v65.x 级别。 (as per ChromeDriver v2.37 release notes)
    • 清理你的项目工作区通过你的IDE和重建你的项目只需要依赖。
    • 使用CCleaner 工具在执行测试套件之前和之后清除所有操作系统杂务。
    • 如果您的基础 Web Client 版本太旧,请通过 Revo Uninstaller 卸载它并安装最新的 GA 和发布版本的 Web Client。
    • 进行系统重启。
    • 执行您的@Test。

    【讨论】:

      【解决方案2】:

      我认为您的页面仍然有 beforeunload 处理程序,它会阻止驱动程序导航到另一个页面。

      我看到了this answer,但它对我也不起作用。我知道这是因为beforeunload 用 jQuery 设置的也应该用 jQuery 清除:

      # clear beforeunload hook if you set it with jQuery
      page.execute_script("$(window).off('beforeunload')")
      
      # clear onbeforeunload if you set it with plain JS
      page.execute_script("window.onbeforeunload = function() {};")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-29
        • 2015-01-02
        • 2017-07-22
        • 1970-01-01
        • 2013-10-10
        • 2021-11-01
        • 1970-01-01
        相关资源
        最近更新 更多