selenium-webdriver - 如何等待并接受带有 capybara / Selenium 的警报框

标签 selenium-webdriver rspec capybara alert unobtrusive-javascript

我在我的 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/

相关文章:

ruby-on-rails - `rails spec` 做了什么而 `rspec` 没有?

ruby-on-rails - 如何减慢 capybara 的速度?

未在集成测试中加载的 Javascript 库

selenium - 如何使用 Firefox 驱动程序读取警报消息?

java - 为什么我的 Java 单元测试结果将预期结果与内存位置进行比较?

ruby-on-rails - Rails pages_controller_spec.rb 测试不应该失败但是,错误?

ruby-on-rails - Rails、Restful Authentication 和 RSpec - 如何测试需要身份验证的新模型

rspec - Capybara 2.1 错误未初始化常量 Rails (NameError)

python - 我正在尝试为添加按钮制定 Xpath 或 CSS

java - 如何升级/更新现有 Selenium Java 项目的 Selenium 版本?