ruby-on-rails – 如何使用capybara DSL测试Select2元素?

我在页面上有一个 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.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...