2017-09-26 2 views
0

(Click for image) Ich arbeite an einem Projekt, um ein Szenario zu schreiben, um Anmeldungsfunktion zu testen. aus irgendeinem Grunde Capybara nicht den Zugriff auf dynamische Elemente: Schritte zum Reproduzieren: 1) besuchen Redfin.com (zum Beispiel) 2) Klicken Sie auf Schaltfläche Anmelden 3) ein dynamischer Popup-Dialog erscheint 4) Klicken Sie auf „Weiter mit E-Mail "und versuchen Sie, Details einzugeben und auf Senden zu klicken.Wie man dynamische Elemente mit Gurke und Capybara behandelt

Ich kann keines der Elemente mit find (#) finden und kann nicht auf submit klicken oder Details eingeben.

Auch ich glaube, dass die Webapp mit React gebaut wird. Bitte lassen Sie mich wissen, wie Sie damit umgehen.

<div class="emailSignInButtonWrapper" style="position: relative;"> 
<button class="button Button tertiary emailSignInButton v3" type="button" tabindex="0" data-rf-test-name="submitButton"> 
<span> 
<span class="signInText">Continue with Email</span> 
</span> 
</button> 
+1

Ich weiß nicht, wie der Code aussieht, ein Beispiel wäre gut. Da Sie jedoch erwähnt haben, dass die App in React geschrieben ist, wäre meine erste Vermutung, mit 'js: true' zum' Capybara.javascript_driver' zu wechseln. Vielleicht finden Sie das nützlich. https://github.com/teamcapybara/capybara#drivers – hyphenbash

+0

@hyphenbash Für den HTML-Code können Sie die (redfin.com Website), – user8673269

+0

Mögliche Duplikat von [Wechseln zu Popup-Fenster in Gurke, Capybara] (https: // stackoverflow.com/questions/18983684/switch-to-popup-windows-in-cucumber-capybara) –

Antwort

0

Keines der Elemente Sie sprechen, haben ids so finden eine CSS #<id> (find('#my_button').click) wird nicht funktionieren. Doch auf diese Schaltfläche klicken, sollten Sie nur in der Lage sein zu tun,

click_button('Continue with Email') # case of the text matters 

oder

click_button(class: 'emailSignInButton') 

Dies alles vorausgesetzt, dass Sie einen Treiber mit Capybara verwenden, die JS unterstützt - https://github.com/teamcapybara/capybara#drivers

Hier ist Code, der zeigt, es funktioniert, wenn ein JS-fähiger Treiber verwendet wird

require 'capybara/dsl' 
require 'selenium-webdriver' 

session = Capybara::Session.new(:selenium_chrome) 
session.visit "https://www.redfin.com" 

session.click_link('Sign In', href: nil) 

session.click_button('Continue with Email') 
+0

poste Ich habe versucht, diese ohne Glück, einen Fehler _Unable zu finden, um sichtbare Schaltfläche nil mit Klassen [EmailSignInButton] (Capybara :: ElementNotFound) _ – user8673269

+0

@ user8673269 dann zu finden Sie verwenden entweder kein Selen für diese Tests oder Capybara.default_max_wait_time ist zu niedrig für die Hardware, auf der Sie testen. Versuchen Sie, einen Screenshot zu machen, um zu sehen, was der tatsächliche Seitenzustand ist –

+0

@ user8673269 Code hinzugefügt, der zeigt, dass es funktioniert - höchstwahrscheinlich Sie Selen nicht verwenden, wie durch Ihre Tags angezeigt –

0

Hier ' s was für mich auf der redfin-seite funktionierte:

scenario "bring up signup form on redfin" do 
    visit 'https://www.redfin.com' 
    find('a', :text => 'Sign In').click 
    click_button('Continue with Email') 
end 
Verwandte Themen