Capybara - 具有`within_window`的规格在没有'sleep`的情况下不起作用

时间:2017-06-23 09:03:42

标签: ruby-on-rails rspec capybara

我有一个点击按钮的规范,它会触发一些JS生成网址并在新窗口中打开它:

new_window = window_opened_by { find('#search_postcode').click }
within_window new_window do
  expect(page.current_url).to include('postcode.nl')
end

这不起作用。我收到以下错误:

Failure/Error: expect(page.current_url).to include('postcode.nl')
       expected "about:blank" to include "postcode.nl"

但是,当我添加sleep 1时,规范会通过:

within_window new_window do
  sleep 1
  expect(page.current_url).to include('postcode.nl')
end

是否可以在没有sleep的情况下使其工作?

2 个答案:

答案 0 :(得分:1)

您可以在新的Windows html中检查选择器。 Capybara然后应该等待default_waittime以显示元素。喜欢:

within_window new_window do
  expect(page).to have_selector('.your_class_here')
  expect(page.current_url).to include('postcode.nl')
end

答案 1 :(得分:0)

无需测试元素的存在,您可以使用提供的have_current_path匹配器,其中包括等待/重试行为,并且通常应该(99.9%的时间)优先使用RSpec提供的文本匹配器和结果current_url

within_window new_window do
  expect(page).to have_current_path(/postcode\.nl/, url: true)
end