Selenium/WebDriver脚本被警报中断 - 异常"消息:u'Modal对话框存在'"

tsa*_*lic 11 python selenium webdriver

我是Python/JS的新手,也是Selenium/WebDriver的自动化测试,但我已经取得了一些进展!

现在我陷入了困境,这真的令人沮丧.

我正在测试的网站销售产品.我设法使我的脚本随机导航并进入付款页面,填写虚拟数据,使用以下方式提交数据:

browser.execute_script("document.Form.submit(); return true;")
browser.execute_script("processPayment(); return true;")
Run Code Online (Sandbox Code Playgroud)

通常,有一个立即付款按钮,单击该元素会导致相同的异常,我无法通过WebDriver(没有WebElement)单击确定/取消,但我发现执行此JS代码我可以得到过去了.我的新加载的页面(在提交数据并确认发布后)带有确认和所有正确的数据加载,但Python脚本被中断,我无法继续测试.

这有解决方法吗?我想要它做的是忽略该模态对话框,等待下一个确认页面加载,然后继续定位元素,打印它们的值,存储它们等.

尝试使用:

wait = ui.WebDriverWait(browser,10)
wait.until(lambda browser: browser.title.lower().startswith('Your Receipt'))
print(browser.title)
Run Code Online (Sandbox Code Playgroud)

但脚本被打断了.对不起,如果这已经回答,但我找不到,而且我也是新手!

提前致谢!

编辑:

做到了!在我的情况下,有效的是我只修改了我的代码

browser.execute_script("document.roomBookingForm.submit(); return true;")
alert = browser.switch_to_alert()
alert.dismiss()
browser.execute_script("processPayment(); return true;")
Run Code Online (Sandbox Code Playgroud)

请注意您需要导入警报的新手.

from selenium.webdriver.common.alert import Alert
Run Code Online (Sandbox Code Playgroud)

tsa*_*lic 8

请注意新手(像我一样),您需要导入警报.

from selenium.webdriver.common.alert import Alert

... ... ... (code placeholder)

browser.execute_script("document.roomBookingForm.submit(); return true;")
alert = browser.switch_to_alert()
alert.dismiss()
browser.execute_script("processPayment(); return true;")
Run Code Online (Sandbox Code Playgroud)

刚刚添加了警报处理程序

  • 当然请注意alert.dismiss()按下"取消"按钮; 使用alert.accept()按"确定". (3认同)