我正在尝试测试正在开发的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/