如何等待并接受带有水豚/硒的警报箱

Tib*_*agy 5 alert rspec unobtrusive-javascript capybara selenium-webdriver

我在我的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
Run Code Online (Sandbox Code Playgroud)

click_button火灾一个不显眼的JavaScript调用,显示一条警告弹出窗口.但是,关闭警报框仅在大约50%的测试运行中成功,我猜是因为警报框在命令page.driver.browser.switch_to.alert.accept运行时并不总是在屏幕上.如果警报框未关闭,下一个测试用例当然会遇到"超时错误".

如果我sleep 1click_button和之间使用它总是正常工作...alert.accept,但它不是一个非常好的解决方案.任何的想法?

Tim*_*ore 19

这是我用过的一些代码.

wait = Selenium::WebDriver::Wait.new ignore: Selenium::WebDriver::Error::NoAlertPresentError
alert = wait.until { page.driver.browser.switch_to.alert }
alert.accept
Run Code Online (Sandbox Code Playgroud)

  • 对于 v4.5.0,我必须使用 `wait = Selenium::WebDriver::Wait.newignore: Selenium::WebDriver::Error::NoSuchAlertError` (2认同)