我在我的 rspec 测试中使用以下代码:
describe "Save should create a BasketItem and a Basket" do
subject {
lambda {
click_button I18n.t(:create_basket_and_add_items)
page.driver.browser.switch_to.alert.accept # close the alert box
}
}
it { should change(BasketItem, :count).by(1) }
it { should change(Basket, :count).by(1) }
end
click_button
触发一个不显眼的 javascript 调用,它显示一个警告弹出窗口。然而,关闭警报框仅在大约 50% 的测试运行中成功,我猜是因为在命令 page.driver.browser.switch_to.alert.accept
时警报框并不总是在屏幕上。在跑。如果警告框没有关闭,下一个测试用例当然会遇到“超时错误”。如果我使用
sleep 1
,它总是能正常工作之间click_button
和 ...alert.accept
,但这不是一个很好的解决方案。任何的想法?
最佳答案
这是我为此使用的一些代码。
wait = Selenium::WebDriver::Wait.new ignore: Selenium::WebDriver::Error::NoAlertPresentError
alert = wait.until { page.driver.browser.switch_to.alert }
alert.accept
关于selenium-webdriver - 如何等待并接受带有 capybara / Selenium 的警报框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21850949/