用黄瓜测试导轨的自动完成

Thi*_*ago 2 autocomplete ruby-on-rails cucumber

我需要用黄瓜测试自动完成字段.我怎样才能做到这一点?我试过了

  Scenario: Using Autocomplete   
  Given I am on the home page
  And there are the following users:
    |id |name   |
    |1  |foo    |
  When I fill in "name" with "f" 
  Then I should see "foo" 
Run Code Online (Sandbox Code Playgroud)

但后来它失败了,因为预计以下元素的内容包括"foo".有任何想法吗?

小智 5

您需要为测试使用支持JS的驱动程序.如果您使用webrat o capybara,您可以尝试使用硒.

Then I should see "foo" 
Run Code Online (Sandbox Code Playgroud)

这在使用默认Web步骤时不起作用,因为DOM在查找文本时尚未更新.有两种选择:

选项1:等待

And I wait for 1 second
Then I should see "foo"
Run Code Online (Sandbox Code Playgroud)

你需要实现这个步骤来调用sleep(n)

选项2:自定义定位

Capybara的locate方法将查看目标是否存在于DOM中.如果不是,它将等待几秒钟并再次尝试并抛出错误,如果它仍然不存在.

Then I should see the following autocomplete options:
| foo |
Run Code Online (Sandbox Code Playgroud)

这就是我对步骤的实现方式:

Then /^I should see the following autocomplete options:$/ do |table|
  table.raw.each do |row|
    locate(:xpath, "//a[text()='#{row[0]}']")
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您需要有关此主题的更多详细信息,我已经撰写了一个博客文章,其中包含示例和一些代码段,还涉及单击自动填充选项:

http://www.aentos.com/blog/testing-ajax-autocomplete-fields-cucumber-and-capybara