UnexpectedAlertPresentException

UnexpectedAlertPresentException

我正在尝试测试正在开发的Webapp。我正在针对Firefox 22.0使用Firefox驱动程序。

某一时刻,可能会弹出一个模态对话框(Java脚本提示())。如果是这样,我想输入一些文本然后将其关闭(单击“确定”)。

以下是相关代码:

try:
    if button.text == "Run":
        button.click()
except UnexpectedAlertPresentException:
    alert = self.driver.switch_to_alert()
    print alert.text
    alert.send_keys('8080')
    alert.dismiss()

引发了UnexpectedAlertPresentException。但是,一旦它尝试执行print alert.text,我得到:
`NoAlertPresentException: Message: u'No alert is present'`.

如果我删除了打印语句,它会在alert.send_keys上用以下命令炸毁:
`WebDriverException: Message: u'fxdriver.modals.find_(...) is null'`

我不明白从定义上讲NoAlertPresentException是否与首先引发并导致except块被执行的UnexpectedAlertPresentException相矛盾?

编辑:此外,我一生无法找到http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html#documentation中有关UnexpectedAlertPresentException的任何文档

编辑2:这就是我现在所拥有的:
try:
    if button.text == "Run":
        button.click()

        alert = self.driver.switch_to_alert()

        alert.send_keys('1111')
        alert.dismiss()

 except NoAlertPresentException:
     pass

但是,我仍然看到此:
WebDriverException: Message: u'fxdriver.modals.find_(...) is null'

alert.send_keys('8080')上。我想我不明白,如果没有警报,为什么switch_to_alert()不会抛出NoAlertPresent ...这就是我假设WebDriverException所指示的内容。

最佳答案

我认为Selenium会关闭意外警报。显然,您可以更改firefox驱动程序处理意外警报的方式:
How to handle an Alert with "UnexpectedAlertBehaviour" capability in Selenium?

或者,您可以在执行操作之前检查是否有警报(毕竟,如果要处理警报,这不是意外的),例如(Java):

try {
  Alert alert = _driver.switchTo().alert();
  //do stuff with alert
} catch (final NoAlertPresentException e) {
  //do non-alert stuff
}

关于python - Webdriver错误: "No alert is present" after UnexpectedAlertPresentException is thrown,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17576148/

10-10 00:22