2013-01-21 21 views
7

Próbuję przetestować autouzupełnianie interfejsu użytkownika jquery, mam testy przechodzące przy użyciu sterownika selenu. Chcę przejść na poltergiest dla niektórych testów bezgłowych, ale teraz moje testy kończą się niepowodzeniem.Testy ogórek @javascript przechodzą przy użyciu sterownika selenu, ale kończą się niepowodzeniem podczas korzystania z poltergiest

Nie wydaje się, aby wybrać opcję autouzupełniania z jakiegoś powodu, że mam jeszcze w stanie zorientować się,

Krok

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 

Test przechodzi za pomocą sterownika selen bez zmian do kroku.

Wszelkie porady dotyczące tego, jak mogę to debugować?

wersja

  • selen webdriver (2.27.2)
  • poltergeist (1.0.2)
  • ogórka (1.2.1)
  • ogórek szyny (1.0.6)
  • kapibara (1.1.4)
  • phantomjs 1.8.1
+0

Na którym rząd dokłada ten test kończy się niepowodzeniem? –

+0

kiedy twierdzę, że pole powinno zawierać tekst z autouzupełniania: find_field ("contract"). Value.should == "John Smith (123456)". Wydaje się, że strona page.execute_script nie uruchamia się poprawnie. – Martinffx

Odpowiedz

8

Udało mi się to rozgryźć, wygląda na to, że sterownik kapberara-poltergeist nie wyzwala żadnego ze zdarzeń, które jquery-ui używa do wyświetlania listy rozwijanej.

Znalazłem odpowiedź tutaj: https://github.com/thoughtbot/capybara-webkit/issues/50

stworzyłem postać pomocnika w funkcji/support

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) 

I następnie wykorzystywane te metody, aby wypełnić formularz i wybrać żądaną opcję.

3

odpowiedź Marcina niemal pracował dla mnie, ale okazało się, że wejście musi być skupiona, jak również, aby to działało:

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 

Znalazłem to na tej samej stronie: https://github.com/thoughtbot/capybara-webkit/issues/50#issuecomment-4978108