- gem 'jquery-rails',版本为'2.1.2'
- gem 'rails3-jquery-autocomplete',版本为'1.0.9'
- gem 'rspec-rails',版本为'2.11.4'
- gem 'capybara',版本为'1.1.3'
- gem 'capybara-webkit',版本为'0.12.1'
我最近将选择下拉列表转换为自动完成(使用rails3-jquery-autocomplete),并尝试更新我的请求规范以填写自动完成内容。
我的方法是创建一个辅助程序,如this gist所示:
def fill_autocomplete(field, options = {})
fill_in field, :with => options[:with]
selector = "ul.ui-autocomplete a:contains('#{options[:select]}')"
page.should have_selector selector
page.execute_script "$(\"#{selector}\").mouseenter().click()"
end
如果我使用Webkit测试,测试将失败并显示以下消息:
expected css "ul.ui-autocomplete a:contains('Firstname Lastname')" to return something.
如果我使用Selenium进行测试,在Firefox中观察测试的过程,我并没有看到下拉选择列表出现。添加一个“sleep 3”来等待下拉列表的出现并没有帮助。
我在这里看到了一个相关但有些陈旧的问题,涉及到capybara-webkit,当填写字段时,它会立即模糊不清,这当然会阻止自动完成选项列表的出现。但是其他人似乎已经让它正常工作了。
目前是否可能使用RSpec和Capybara测试包含rails3-jquery-autocomplete字段的表单?如何做?如果不能,是否有一种方法手动填写相应的隐藏id字段,以便仍然可以测试表单创建正确的数据?
:contains
不是有效的W3C CSS选择器(只有jQuery支持)。我通过https://dev59.com/H1jUa4cB1Zd3GeqPPkO-中列出的解决方案,在我的名字下进行了修复。 - Trung Lê