我是水豚和Ruby on Rails世界的新手。我正在使用水豚为Rails应用程序编写黄瓜功能。
我在步骤定义文件中使用睡眠语句来等待页面(或者更确切地说是表单)被提交。但我观察到,页面提交时间各不相同。那么,我如何告诉水豚等待下一个页面加载或发生某些操作呢?
expect(page).to have_css(".alert.in.alert-success" , text: arg1,exact: true)我已经尝试了上面的方法等待,但它不起作用。我发现wait_until在capybara2.0中被弃用了,所以谁能告诉我如何在水豚中等待,直到页面被提交,或者直到一些操作发生?
发布于 2016-01-06 21:00:23
水豚通常非常擅长等待元素的出现。但是您遇到了问题,您可以尝试增加默认等待时间,也可以手动等待。这里有一篇文章可能对你有所帮助
https://robots.thoughtbot.com/automatically-wait-for-ajax-with-capybara
发布于 2016-01-07 06:38:45
在您提供的expect示例中,exact:true选项与传递的:text选项无关,而是与传递给Capybara提供的"selectors“(:button、:field等)的定位器相关。由于您没有使用这些选择器中的任何一个,因此该选项实际上没有任何作用。要让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 visiblehttps://stackoverflow.com/questions/34633269
复制相似问题