【问题标题】:How to set UnexpectedAlertBehaviour in Selenium Python如何在 Selenium Python 中设置 UnexpectedAlertBehaviour
【发布时间】:2019-08-28 21:41:12
【问题描述】:

This question 处理在 Java 中设置 Selenium webdriver 的 UnexpectedAlertBehaviour。你如何在 Python 的 ChromeDriver 中做同样的事情?

我尝试了以下方法;

    options = ChromeOptions()
    options.headless = True
    options.set_capability("UNEXPECTED_ALERT_BEHAVIOUR", "ACCEPT")
    options.set_capability("unexpectedAlertBehaviour", "accept")
    options.set_capability("CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR", "ACCEPT")
    options.set_capability("UnexpectedAlertBehaviour", "ACCEPT")
    webdriver.DesiredCapabilities.CHROME["unexpectedAlertBehaviour"] = "accept"
    cls.driver = webdriver.Chrome(chrome_options=options)

但是,我仍然随机遇到这个意外的alertpresent 异常:

selenium.common.exceptions.UnexpectedAlertPresentException:警报文本: 消息:意外警报打开:{警报文本:}

当我以非无头模式(头模式?)运行浏览器时,我看不到此类警报,但测试仍然随机失败并出现此异常,尽管我努力设置这个难以捉摸的选项。

【问题讨论】:

  • 您是否尝试过在此处对您的链接问题的 python 编码答案中所述捕获错误:stackoverflow.com/a/30731973/7592395
  • 我宁愿总是接受意外警报而不是处理异常,因为我希望测试继续进行,即使有意外警报。如果我知道它存在,我可以切换到警报,但在这种情况下,出现的警报是随机的(有时它会弹出,有时它不会弹出)。我的下一步是始终尝试接受警报并在警报不存在时处理异常,但这似乎有点难看。

标签: python selenium exception selenium-chromedriver


【解决方案1】:

随着 chromedriver 变得符合 W3C 标准。我们需要使用unhandledPromptBehavior 检查 ChromeDriver 76.0.3809.126(默认在 W3C 标准兼容模式下运行)

chrome_options = Options()
chrome_options.set_capability('unhandledPromptBehavior', 'accept')
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.google.com")
driver.execute_script('alert(\"HI\");')
time.sleep(10)
print(driver.title)
time.sleep(10)

参考 Chrome 驱动程序:Issue 2597: Support new unhandledPromptBehavior modes

【讨论】:

  • 成功了,谢谢。仅供未来的谷歌用户使用,您可以对 Firefox geckodriver 使用相同的代码(特别是 set_capability 行),并且它的工作方式相同。同样对于“接受和通知”选项,我发现它只有在我将其设置为单个单词“acceptandnotify”时才有效,但是它仍然会导致单元测试失败。
猜你喜欢
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 2023-01-28
  • 2017-09-09
  • 1970-01-01
  • 2018-02-07
  • 2019-07-27
  • 1970-01-01
相关资源
最近更新 更多