更新:经过许多艰苦的工作,我已经解决了这个问题。我很高兴成为任何需要帮助的人的资源。这是我working setup.的要点
我尝试了所有可以找到Google和SO的解决方案。这是我尝试过的一些不同的事情:
page.execute_script %Q{$('#{selector}').val('#{value}').trigger('keydown')}
和
fill_in field, with: options[:with]
page.execute_script %Q{ $('##{field}').trigger('focus') }
page.execute_script %Q{ $('##{field}').trigger('keydown') }
这是失败的原因:
page.should have_selector('ul.ui-autocomplete li.ui-menu-item a')
但是当我在Firebug中查看它并在浏览器中对其进行测试时,它肯定在那里。
这是所有详细信息,包括上述内容的重述。请记住,自动完成字段在浏览器中可以正常工作。
listing_integration_spec.rb
require "spec_helper"
describe "Listing Integration" do
let!(:user) { login_user }
it "lets a user add information listing", js: true do
listing = create(:listing, user: user)
click_link('Additional Information')
click_link('Create')
fill_autocomplete('listings_search', with: listing.item_id)
end
end
spec/support/feature_helper.rb
def fill_autocomplete(field, options = {})
fill_in field, with: options[:with]
page.execute_script %Q{ $('##{field}').trigger('focus') }
page.execute_script %Q{ $('##{field}').trigger('keydown') }
selector = %Q{ul.ui-autocomplete li.ui-menu-item a:contains('#{options[:with]}')}
page.should have_selector('ul.ui-autocomplete li.ui-menu-item a')
page.execute_script %Q{ $("##{selector}").trigger('mouseenter').click() }
end
ERB from view template
<%= simple_fields_for :listings do |f| %>
<%= f.input :search, label: "Search by Listing", required: true %>
<% end %>
和咖啡脚本:
$("#listings_search").autocomplete
source: (request, response) ->
options =
term: request.term
$.get "/search_listings", options, (data) ->
if data.length == 0
alert "No listings found."
response data
minLength: 2
select: (event, ui) ->
add_listing_hash =
type: "GET"
url: "/add_listing"
data: { id: ui.item.id }
success: () ->
$.ajax(add_listing_hash)
最佳答案
JS驱动程序通常很慢,它们很慢,而且没有一个驱动程序能够覆盖100%的功能,并且它们通常很古怪且难以调试,但是我敢肯定,到目前为止,您已经弄清楚了。
我在Rails 3.2,minitest和poltergeist 1.3.0(一个下拉列表)上也有类似的代码,但是由于某种原因它会定期中断(可能有人说它有poltergeist吗?我已经采用了切换该测试的方法)到目前为止,硒和Poltergeist之间有两次之间的距离),不确定为什么自动填充程序对您不起作用,但感觉像是个错误,
将问题提交给https://github.com/jonleighton/poltergeist(您已经拥有了https://github.com/jonleighton/poltergeist/issues/439),尝试更改为selenium或webkit,看看它是否有效,如果它使您脱颖而出,则可以在此测试中使用其他驱动程序(击败失败)工作的小部件工作数天)。