【问题标题】:when selenium runing, can selenium close and detect window alert if apear window alert?硒运行时,如果出现窗口警报,硒可以关闭并检测窗口警报吗?
【发布时间】:2016-07-30 09:23:28
【问题描述】:

当 selenium 运行时, 它可以关闭并检测窗口警报, 如果出现窗口警报? 我需要它,因为窗口警报在网络中随机出现。
这是伪代码

try:    
    if window alert is apear:
       context.driver.switch_to.alert().dismiss()
except NoAlertPresentException:
   print('no alert')

【问题讨论】:

  • 此警报是否在每个特定场景中出现一次,或者发生在任何随机动作上??
  • 好的,那么您需要使用 JavaScript 阻止警报...尝试提供的答案..:)

标签: python-3.x selenium


【解决方案1】:

你能试试这个吗:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

browser = webdriver.Firefox() //or Chrome("path to chromedriver.exe")
browser.get("url")
browser.find_the_element_by_id("someID")

try:
    WebDriverWait(browser, 10).until(EC.alert_is_present(),
                                   'Timed out')

    alert = browser.switch_to_alert()
    alert.accept()
except TimeoutException:
    print "There is no alert window."

您可以将 10 修改为您想要的任何时间延迟。

【讨论】:

  • 如果警报随机发生任何操作,那么它的代码如何处理它?正如 OP 所说...我看到它只是处理启动 URL 后是否发生警报。如果在任何操作后发生警报会怎样??
  • @SaurabhGaur,好点子,谢谢。我需要在我的回答中加入更多想法。
【解决方案2】:

正如您所说的警报随机发生并且您无法知道它何时发生,那么您应该使用execute_script() 来禁用每次页面更改或刷新时的警报发生意味着您需要执行一次JavaScript页面已更改为禁用警报:

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

此 Java 脚本覆盖了警报的功能,因此您需要在每次页面加载时执行一次。当它执行时,警告框永远不会出现,直到页面刷新。

希望对您有所帮助...:)

【讨论】:

  • 啊谢谢我试试
猜你喜欢
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
相关资源
最近更新 更多