2016-04-20 13 views
0

Ich habe ein Schienenprojekt mit capybara 2.6.2 und capybara-webkit 1.8.0.Capybara kann keinen Link zu einem Modal finden, das sich beim Drücken der Taste ändert

ich ein Feature-Test für eine Strömung auf meiner Seite schreibe, die wie folgt aussieht:

scenario "Buyer creates a seller profile", :js => true do 
    click_link("SELL ON MYSITE",match: :first) 
    expect(page).to have_text("Reach thousands of customers in your area") 
    click_link("Create an Activity",match: :first) 
    expect(current_path).to eql (new_seller_profile_path) 

    fill_in "seller_profile[business_name]", :with => "Test company" 
    fill_in "seller_profile[business_email]", :with => "[email protected]" 
    fill_in "seller_profile[business_phone_number]", :with => "07771330510" 
    fill_in "seller_profile[business_description]", :with => "This is a test company" 

    find('label[for="social"]').click 


    find("#facebook-placeholder").click 

    fill_in "seller_profile[business_facebook_url]", :with => "https://www.facebook.com/test" 

    click_button("CREATE AN ACTIVITY") 

------ diese Schaltfläche öffnet einen modal, nachdem die Seite Änderungen ------ -

fill_in "seller_profile[requested_postcode]", :with => "EH21 8PB" 

    click_button("Submit") 

    save_and_open_screenshot 

------ das ist, wo es schief geht -------

click_link("Continue") 

    expect(page).to have_text("Choose the type of activity that you want to create") 

end 

Die click_link weiterhin mit Fehler fehlschlägt:

Failure/Error: click_link("Continue") 

    Capybara::ElementNotFound: 
     Unable to find link "Continue" 

Der Link tatsächlich existiert - wenn Sie auf der Schaltfläche einige Javascript ausführen einreichen klicken, die den Inhalt der modalen ändern einigen neuen Text und eine neue Schaltfläche angezeigt werden soll. Allerdings wartet click_link aus irgendeinem Grund nicht auf das Modal, es schlägt sofort fehl.

mit einem save_and_open_screenshot Aufruf haben wir diese Situation als modal sehen javascript noch auszuführen hat, wie wir noch die Submit-Button sehen:

enter image description here

Interessanterweise ist die Maus scheint nicht auf das Senden Schaltfläche, wie es sollte es gerade geklickt haben?

enter image description here

Wie kann ich die click_link warten zu lassen, bis die Taste erscheint weiter ?!

Dies ist das Javascript, das zu dem modalen, die sie auf der Presse von ‚Senden‘ hinzugefügt ausführt ändert:

ein paar Betten in Scheinbar
$('#gate .modal-body .intro').text('Congratulations, we are available in your location, please continue to create your activity.'); 

$('#gate .modal-footer').append('<a class="btn btn-lg btn-primary" href="/events/new/">Continue</a>'); 
+0

Haben Sie versucht, so etwas wie [das] (http://stackoverflow.com/a/23555725/634576) ? –

+0

also schlägst du vor, dieses wait_until hinzuzufügen und es zu übergeben? – RenegadeAndy

+1

Ist der Text auf der Schaltfläche "Weiter" oder ist es wie beim Senden der Schaltfläche in Großbuchstaben "WEITER", eventuell über CSS-Text-Transformation? –

Antwort

0

Zugabe wurde behoben. Ich weiß nicht, ob das eine "richtige" Lösung ist. Wenn jemand einen besseren Weg, oder möglicherweise eine bessere Art und Weise hat, würde Ich liebe dich mir, es zu finden:

fill_in "seller_profile[requested_postcode]", :with => "EH21 8PB" 

    sleep 2 

    click_button("Submit") 

    sleep 2 

    click_link("Continue") 
+1

Wahrscheinlich nur der erste Schlaf ist notwendig, um das Problem zu lösen und bestätigt ziemlich seine Animation, die das Problem verursacht. Deaktivieren Sie die Animation im Testmodus (dies hängt von der Bibliothek ab, die Sie für Ihre Mods verwenden) und die Notwendigkeit für den Ruhezustand sollte ebenfalls wegfallen. –

+0

Es tut nicht Tom, da das Javascript noch Zeit braucht, um auszuführen .... so glaube ich, dass ein Schlaf immer benötigt wird. Nachdem versucht wurde, die css-Übergänge zu entfernen und jquery-Animationen zu deaktivieren, ist es immer noch nicht sofort, da Javascript läuft! – RenegadeAndy

+1

Es muss nicht augenblicklich sein, Capybara wird auf den Gegenstand warten bis er in Capybara.default_max_wait_time Sekunden erscheint. Es sollte nur innerhalb dieser Zeit erscheinen und sich nicht bewegen. Sie können diese maximale Zeit auch im click_button-Aufruf überschreiben, wie 'click_button ('Submit', wait: 10)', die bis zu 10 Sekunden warten. Das Problem wurde jedoch nicht angezeigt, da in diesem Fall ein Fehler aufgetreten wäre - Welche Bibliothek verwendest du für die Mods (Bootstrap, etc)? Wenn bootstrap - siehe http://getbootstrap.com/javascript/#disabling-transitions –