2010-03-22 80 views
2

我需要使用黄瓜测试自动填充字段。我怎样才能做到这一点?我试图使用黄瓜测试导轨的自动完成功能

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" 

但随后由于预期以下元素的内容,包括“foo”的失败。 有什么建议吗?

回答

0

自动完成使用Javascript来设置文本字段的值(在您的案例中的“名称”)。由于Cucumber使用Webrat检查服务器返回的响应,并且Webrat不支持Javascript,所以您的场景失败。

黄瓜可以使用Selenium来自动化Javascript测试,并确认期望值正在插入。更多信息here

5

您需要为测试使用支持JS的驱动程序。如果你正在使用webrat o水豚,你可以尝试使用硒。

Then I should see "foo" 

这不能使用默认的网页步骤,因为在查找文本时DOM尚未更新。有2个选项:

方法1:等待

And I wait for 1 second 
Then I should see "foo" 

您需要实现这一步调用sleep(N)

选项2:自定义查找

水豚的locate方法将查看目标是否存在于DOM中。如果没有,它会等待几秒钟,然后再试一次,如果它仍然不存在,就会抛出一个错误。

Then I should see the following autocomplete options: 
| foo | 

这是执行的步骤的样子对我来说:

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

如果您需要对这个问题我已经写有例子和一些片段一博文更详细的信息,也处理点击提交的自动完成选项:

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