更新:经过许多艰苦的工作,我已经解决了这个问题。我很高兴成为任何需要帮助的人的资源。这是我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,看看它是否有效,如果它使您脱颖而出,则可以在此测试中使用其他驱动程序(击败失败)工作的小部件工作数天)。

09-30 19:15