2017-09-26 4 views
0

(Click for image) Je travaille sur un projet pour écrire un scénario pour tester la fonctionnalité de connexion. pour quelque raison capybara n'accède pas aux éléments dynamiques: Étapes à reproduire: 1) visitez Redfin.com (par exemple) 2) cliquez sur le bouton S'identifier 3) une boîte de dialogue dynamique apparaît 4) cliquez sur "continuer avec email "et essayez et entrez les détails et en cliquant sur soumettre.Comment gérer les éléments dynamiques avec du concombre et du capybara

Je n'arrive pas à trouver les éléments avec find (#) et je ne peux pas cliquer sur soumettre ou entrer des détails.

Aussi je crois que la webapp est construite avec React. S'il vous plaît laissez-moi savoir comment gérer cela.

<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

Je ne sais pas comment le code ressemble, un exemple serait bon. Cependant, comme vous l'avez mentionné, l'application est écrite dans React, ma première hypothèse serait de passer à 'Capybara.javascript_driver' en utilisant' js: true'. Vous pourriez trouver cela utile. https://github.com/teamcapybara/capybara#drivers – hyphenbash

+0

@hyphenbash Pour le code html, vous pouvez visiter le (site web redfin.com), – user8673269

+0

Copie possible de [Passer aux fenêtres popup dans le concombre, capybara] (https: // stackoverflow.com/questions/18983684/switch-to-popup-windows-in-cucumber-capybara) –

Répondre

0

Aucun des éléments dont vous parlez ont ids donc un CSS trouver en utilisant #<id> (find('#my_button').click) ne va pas travailler. Cependant à cliquer sur ce bouton, vous devriez juste être capable de faire

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

ou

click_button(class: 'emailSignInButton') 

Tout cela suppose que vous utilisez un pilote avec Capybara qui prend en charge JS - https://github.com/teamcapybara/capybara#drivers

est ici le code qui montre cela fonctionne si vous utilisez un pilote compatible JS

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

J'ai essayé d'utiliser ces sans chance, obtenir une erreur _Unable pour trouver le bouton visible nil avec les classes [emailSignInButton] (Capybara :: ElementNotFound) _ – user8673269

+0

@ user8673269 puis soit vous n'utilisez pas de sélénium pour ces tests, soit Capybara.default_max_wait_time est trop faible pour le matériel sur lequel vous testez. Essayez de prendre une capture d'écran pour voir quel est l'état réel de la page. –

+0

@ user8673269 Code ajouté montrant que cela fonctionne - probablement que vous n'utilisez pas le sélénium comme indiqué par vos balises –

0

Ici ' s ce qui a fonctionné pour moi sur le site redfin:

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