等到表格在水豚中提交

时间:2016-01-06 12:33:10

标签: ruby-on-rails-4 rspec cucumber capybara

我是Capybara和Ruby on Rails世界的新手。我正在使用capybara为Rails应用程序编写黄瓜功能。

我在步骤定义文件中使用sleep语句等待页面(或更确切地说是表单)被提交。 但我观察到页面提交时间有所不同。那么我如何告诉capybara等到下一页加载或某些动作发生?

expect(page).to have_css(".alert.in.alert-success" , text: arg1,exact: true)

我已经尝试了上述方法等待,但它没有用。我发现在capybara2.0中不推荐使用wait_until 所以有人可以告诉我如何在资源中等待,直到页面被提交或者直到某些动作发生?

2 个答案:

答案 0 :(得分:0)

水豚通常非常擅长等待元素出现。但是您遇到问题可以尝试增加默认等待时间,或者您可以手动等待它。这是一篇可能有帮助的文章

https://robots.thoughtbot.com/automatically-wait-for-ajax-with-capybara

答案 1 :(得分:0)

在您提供的示例中,exact:true选项与传递的:text选项无关,而是与传递给"选择器"的定位符有关。由Capybara提供(:按钮,:字段等)。由于您没有使用任何这些选择器,因此该选项并非真正做任何事情。要让Capybara等待下一页加载,你需要让它找到下一页可见但在当前页面上没有的东西

expect(page).to have_css('.alert.in.alert-success', text: 'This is only on the next page')

将导致Capybara等待Capybara.default_max_wait_time获取可见元素,其中包含给定文本的给定类将在页面上。如果要匹配元素中的确切文本,可以传递正则表达式

expect(page).to have_css('.alert.in.alert-success', text: /\AThis is only on the next page\Z/)

如果页面加载速度不够快,您可以增加Capybara.default_max_wait_time的值,也可以使用:wait选项覆盖特定调用的值

expect(page).to have_css('.alert.in.alert-success', text: 'This is only on the next page', wait: 10)  # wait up to 10 seconds for the element with given classes containing given text to become visible