为简单起见,我省略了大部分测试,仅包含有问题的代码。这是:
click_button('Search')
page.select 'Preferred', :from => 'ticket_service_type'
当我运行它时,我收到以下信息:
Failure/Error: page.select 'Preferred', :from => 'ticket_service_type'
Capybara::ElementNotFound:
cannot select option, no select box with id, name, or label 'ticket_service_type' found`
此按钮单击事件触发的 AJAX 请求与 select 标记没有任何关系,因此在测试中颠倒顺序会导致测试通过。我知道 Capybara 的默认等待时间是 2 秒,所以我将其更改为 10 秒:
Capybara.default_wait_time = 10
这不会导致测试通过。我怎样才能让这两种方法相互配合并按照用户操作网页的顺序工作?
(如果我发布了规范中的代码,我敢打赌这会很快解决。)
最佳答案
来自 The Cucumber Book(强调我的):
因此,让您的 AJAX 向 DOM 写入一些内容,然后在您的步骤定义中 find() 它。这并不理想。就我而言,我引入了一个(隐藏的)DOM 元素只是为了方便测试,但我还没有找到另一种方法。
关于ruby-on-rails - 如何使用 Capybara/Capybara Webkit/RSpec click_button 和 page.select 缓解计时/AJAX 问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7193923/