sbe*_*eam 18 ruby-on-rails capybara capybara-webkit jquery-select2
我在页面上有一个Select2元素,通过ajax加载结果.希望能与水豚/ rspec的测试这个(使用捉弄人的鬼司机),但是由于选择二元素实际上开始作为一个隐藏字段,然后填充一个<ul>一旦结果进行处理,没有一个正常的select,fill_in或者choose助手会工作.
我现在拥有的是什么
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
Run Code Online (Sandbox Code Playgroud)
上面的第4行,显然capybara可以找到元素,但值不会改变,Select2永远不会进行ajax调用.(不能fill_in在那里使用普通因为搜索字段元素没有label,id或name属性)
我创建了一个可以与Cucumber一起使用的帮助器,它没有sleep它比上面的方法更快.如果您使用createSearchChoiceSelect2提供的功能,这也适用.
把它放进去 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)
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
Then(/^I select2 "([^"]*)" from "([^"]*)"$/) do |value, select_name|
select2 value, from: select_name
end
Run Code Online (Sandbox Code Playgroud)
用Rails 4.1.1和Cucumber 1.3.15测试.
不要挠挠头,这样做会有效
select "option_name_here", :from => "Id Of Your select field"
Run Code Online (Sandbox Code Playgroud)
我尝试了每一个模块和每一个该死的东西,最后只是通过简单的代码行完成了没有任何助手和这样的事情.
您可以使用capybara-select-2 gem,它将为您完成所有工作。只需传递search: true给辅助选项即可进行 Ajax 调用:
select2 'Marriage', from: 'Event', search: true
Run Code Online (Sandbox Code Playgroud)
我能够通过page.execute_script手动将所需的值和keyup事件写入搜索字段来解决此问题。
it "should have a search field for events" do
click_link "Select an Event"
page.execute_script("i = $('.select2-container input').first();
i.val('#{event.description[0,4]}').trigger('keyup');");
sleep 2
find('.select2-results li:first-child').click
click_button "Search"
page.should have_content("Displaying all 2 photos")
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9124 次 |
| 最近记录: |