我在页面上有一个
Select2元素,通过ajax加载结果.想使用capybara / rspec(使用poltergeist驱动程序)进行测试,但是由于Select2元素实际上是作为一个隐藏字段开始,然后填充< ul>一旦处理结果,一般选择,fill_in或选择助手都不会工作.
我现在有什么样的
it "should have a search field for events" do click_link "Select an Event" # this works as expected within('.select2-container') do # works find('.select2-search input').set(event.description[0,5]) # won't work! find(:xpath,"li[text()='#{event.description}']").click end click_button "Search" page.should have_content("Displaying all 2 photos") end
上面的第4行,显然capybara可以找到元素,但是值不会改变,Select2决不会调用它. (无法使用正常的fill_in,因为搜索字段元素没有标签,id或名称属性)
解决方法
我创建了一个可以与黄瓜一起使用的帮助器,它没有睡眠,所以它比上面的方法更快.如果您使用Select2提供的createSearchChoice,这也是有效的.
把它放在features / support / select2_helper.rb中
module Select2Helper def select2(value,attrs) first("#s2id_#{attrs[:from]}").click find(".select2-input").set(value) within ".select2-result" do find("span",text: value).click end end end World(Select2Helper)
使用它像这样:
Then(/^I select2 "([^"]*)" from "([^"]*)"$/) do |value,select_name| select2 value,from: select_name end
测试与Rails 4.1.1和黄瓜1.3.15.