2013-01-21 10 views
7

Sto provando a testare un completamento automatico dell'interfaccia utente jQuery, ho passato i test utilizzando il driver del selenio. Voglio passare a poltergiest per alcuni test senza testa, ma ora i miei test stanno fallendo.@javascript test di cetrioli passano usando il driver del selenio ma falliscono quando si utilizza il poltergiest

Non sembra per selezionare l'opzione di completamento automatico per qualche motivo che non ho ancora avuto modo di capire

Passo

When /^select contract$/ do 
    VCR.use_cassette("contract") do 
    selector = 
     '.ui-menu-item a:contains("John Smith (123456)")' 
    within("div#review") do 
     fill_in("contract", with: "john") 
    end 
    sleep 2 
    page.execute_script "$('#{selector}').trigger(\"mouseenter\").click();" 

    within("div#myPerformaceReview") do 
     find_field("contract").value.should == 
     "John Smith (123456)" 
    end 
    end 
end 

Il test viene superato utilizzando il driver di selenio, senza alcuna modifica al passo.

Qualche consiglio su come eseguire il debug di questo?

Versione

  • selenio-WebDriver (2.27.2)
  • poltergeist (1.0.2)
  • cetriolo (1.2.1)
  • cetriolo-rotaie (1.0.6)
  • capibara (1.1.4)
  • phantomjs 1.8.1
+0

A quale riga fa questo test fallisce? –

+0

quando asserisco che il campo dovrebbe contenere il testo dal completamento automatico: find_field ("contract"). Value.should == "John Smith (123456)". Il page.execute_script non sembra funzionare correttamente. – Martinffx

risposta

8

Sono riuscito a capirlo, sembra che il driver capybara-poltergeist non attivi nessuno degli eventi che jquery-ui usa per visualizzare l'elenco a discesa.

ho trovato la risposta qui: https://github.com/thoughtbot/capybara-webkit/issues/50

ho creato una forma di supporto in caratteristiche/supporto

module FormHelper 
    def fill_in_autocomplete(selector, value) 
    page.execute_script %Q{$('#{selector}').val('#{value}').keydown()} 
    end 

    def choose_autocomplete(text) 
    find('ul.ui-autocomplete').should have_content(text) 
    page.execute_script("$('.ui-menu-item:contains(\"#{text}\")').find('a').trigger('mouseenter').click()") 
    end 
end 
World(FormHelper) 

Allora ho usato quelli metodo per compilare il modulo e selezionare l'opzione desiderata.

3

la risposta di Martin quasi ha funzionato per me, ma ho trovato che l'ingresso deve essere messo a fuoco e per farlo funzionare:

module FormHelper 
    def fill_in_autocomplete(selector, value) 
    page.execute_script %Q{$('#{selector}').focus().val('#{value}').keydown()} 
    end 

    def choose_autocomplete(text) 
    find('ul.ui-autocomplete').should have_content(text) 
    page.execute_script("$('.ui-menu-item:contains(\"#{text}\")').find('a').trigger('mouseenter').click()") 
    end 
end 

trovato questo sulla stessa pagina: https://github.com/thoughtbot/capybara-webkit/issues/50#issuecomment-4978108