Warum können meine Capybara/Poltergeist-test-wählen Sie aus eine jQuery-autocomplete-Feld?


UPDATE: ich habe das problem behob, nach viel mühsame Arbeit auf meinem eigenen. Ich bin glücklich, eine Ressource, die niemanden brauchen, ist eine hand mit diesem. Hier eine Zusammenfassung meiner setup.


Ich habe versucht, jede Lösung, die ich finden konnte, Google und SO. Hier sind einige andere Dinge, die ich versucht habe:

page.execute_script %Q{$('#{selector}').val('#{value}').trigger('keydown')}

und

fill_in field, with: options[:with]
page.execute_script %Q{ $('##{field}').trigger('focus') }
page.execute_script %Q{ $('##{field}').trigger('keydown') }

Dies ist, was fehlschlägt:

page.should have_selector('ul.ui-autocomplete li.ui-menu-item a')

Aber es ist definitiv da, wenn ich es sehe in Firebug, und testen Sie Sie im browser.

Hier sind alle details, einschließlich einer Zusammenfassung von oben. Denken Sie daran, die AutoVervollständigen-Feld funktioniert im browser.

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 %>

und 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)
  • Können Sie bitte das markup der Seite, die Sie testen wollen, und der komplette source-code der test, den Sie ausführen?
  • Haben Sie versuchen, Debuggen das Problem in der Laufenden poltergeist-Sitzung?
  • Ich habe. Es versucht, um die Ereignisse, sondern die Ereignisse werden nicht ausgelöst wird die AutoVervollständigen-die Art, wie Sie sollen. Ich war nicht einmal in der Lage zu berufen, autocomplete direkt.
  • Haben Sie versucht mit der spec mit selenium? Offensichtlich eine längere spec aber einen Versuch ist es Wert. Vor allem AJAX-Zeug IMHO
  • Haben Sie versucht, das hinzufügen einiger Verzögerung zwischen den einzelnen Schritten ? Das ist schmutzig, ich weiß, aber das ist vielleicht sein Weg, um eine mögliche race-condition.
  • Ich fügte hinzu, "sleep 5" zwischen allen Schritten ohne Verbesserung. Bitte beachten Sie, dass ich festgestellt habe, dass die "autocomplete" - event ist in der Tat ausgelöst werden, und ist eine Zeile zurückgeben von Daten, aber dass das Textfeld autocomplete erzeugt es Ergebnisse, die nicht gesehen werden können. Beim Debuggen dieses Verhalten in Poltergeist, finde ich, dass der Poltergeist nutzt die volle Länge des timeout ich habe es so konfiguriert, dann werden nicht finden die ul.ui-autocomplete li.ui-menu-item a - Selektor. Etwas macht Poltergeist auflegen nach "AutoVervollständigen" ist eingeleitet.
  • Haben Sie versucht, einen screenshot in poltergeist an jedem Punkt zu sehen, was poltergeist sehen kann? github.com/jonleighton/...
  • Haben Sie versucht, unter Verwendung eines Arrays statt ajax zum laden der Testdaten? Von dem, was ich verstehe, von Capybara es sollte in der Lage async ok, aber es würde sich lohnen, zu versuchen und zu vereinfachen das problem.
  • Ich bin definitiv screenshotting das heck aus dem test. Die autocomplete "feuert" aber kämpfen, um Sie zu erlauben, klickt auf die Ergebnisse.
  • würden Sie bitte teilen deiner Lösung mit uns? Ich bin mit den gleichen Problem.
  • Ich würde auch gerne die Lösung.
  • Hi Jungs. Alles tun musste, um mit meinem setup. Wenn Ihr AutoVervollständigen funktioniert im browser, aber nicht in RSpec, hier ist alles in meinem setup ist für Sie zu suchen und zu kopieren. Hoffentlich spart dir das etwas Zeit. Lassen Sie mich wissen, wenn irgendetwas fehlt. gist.github.com/HuckyDucky/10219649

InformationsquelleAutor AKWF | 2013-12-29
Schreibe einen Kommentar