Почему мой тест Capybara / Poltergeist не может быть выбран из поля автозаполнения jQuery?

ОБНОВЛЕНИЕ: я исправил эту проблему после большой кропотливой работы самостоятельно. Я счастлив быть ресурсом для всех, кому нужна помощь с этим. Вот суть моегорабочая настройка.

Я попробовал каждое решение, которое смог найти 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 %>

и Coffeescript:

$("#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)

Ответы на вопрос(5)

Ваш ответ на вопрос