用python检查是否存在使用selenium的警报

我正在尝试用python语言编写一个用于pipe理用户的网页的seleniumtesting。 在此页面中,有人可以为用户添加angular色,如果angular色添加时存在angular色,则会引发警报。 我不知道警报是否是一个JavaScript警报或网页的元素。 我想自动检查警报是否存在,因为检查列表中的angular色会浪费时间并且有巨大的负载。 我试过这个:

browser = webdriver.Firefox() browser.get("url") browser.find_the_element_by_id("add_button").click() try: alert = browser.switch_to_alert() alert.accept() print "alert accepted" except: print "no alert" 

但它没有工作,我得到了“UnexpectedAlertPresentException”。 我也试过这个:

 browser = webdriver.Firefox() browser.get("url") browser.find_the_element_by_id("add_button").click() s = set(browser.window_handles) s.remove(browser.current_window_handle) browser.switch_to_window(s.pop()) 

但是我得到了同样的例外。 此外,我试图访问与萤火虫警报,以检查我是否可以访问其属性,但右键点击被禁用。 即使在其他语言中,我也需要一个解决scheme。 无论如何,我可以理解这个方法。 我将不胜感激任何帮助。

我所做的就是在WebDriverWait之前设置一个条件延迟,在我希望看到警报之前,然后切换到它,如下所示:

 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() browser.get("url") browser.find_the_element_by_id("add_button").click() try: WebDriverWait(browser, 3).until(EC.alert_is_present(), 'Timed out waiting for PA creation ' + 'confirmation popup to appear.') alert = browser.switch_to.alert() alert.accept() print "alert accepted" except TimeoutException: print "no alert" 

WebDriverWait(browser, 3 )将等待至less3秒钟以显示受支持的警报。

我知道这是一个来不及回答的问题,几年前你已经解决了这个问题,但是我仍然希望发表我的分析和发现,以供将来的读者参考。

我正在开发一个Django网站开发项目,目前有一个错误,一旦某个特定的网页被打开,就会popup一个错误消息框。 我的环境是:

  • Django 1.8
  • Python 2.7
  • selenium2.46.0

我在这里阅读文档关于“UnexpectedAlertPresentException”,它说:

在出现意外警报时引发。

通常当预期的模式阻止web驱动程序forms执行任何更多的命令时引发。

我在我的项目中进行了testing,结果如下:

  • 当警报框启动时, find_element_by_X方法可以成功。
  • click()或send_keys()将失败,并显示“UnexpectedAlertPresentException”。

因此,我认为try...catch块不起作用,因为“UnexpectedAlertPresentException”被抛出

 browser.find_the_element_by_id("add_button").click() 

这也意味着一旦网页被这行打开,警报框就会出现:

 browser.get("url") 

换句话说,在页面打开后,可能会有更深层次的隐藏问题导致警报框出现。 您可能需要先解决该问题。

另一件事是:假设警告框显示这行之后:

 browser.find_the_element_by_id("add_button").click() 

然后, alert = browser.switch_to_alert()应该可以正常工作,不会抛出exception,这与您在此处描述的内容相矛盾。 这也让我觉得问题早在browser.get("url")行。

我不是很确定选定的解决scheme如何帮助您解决问题,因为我的分析表明问题出在另一个地方。 无论如何,我并不是要求重新select接受的解决scheme。 我只是想分享我对未来的读者的想法。 如果我忽视或误解了这个问题,导致我的分析是错误的(而且浪费你的时间阅读这个:-),请道歉。

在Java中,我们这样做

  WebDriverWait wait3 = new WebDriverWait(driver, 7000); wait3.until(ExpectedConditions.alertIsPresent()); driver.switchTo().alert().accept(); 

它会隐含地等待警报,如果警报不存在,它会抛出'警报不存在'Exceptio',我们可以赶上前进。

希望它有帮助。