我是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 所以有人可以告诉我如何在资源中等待,直到页面被提交或者直到某些动作发生?
答案 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