2017-07-17 3 views
0

J'ai joué avec Capybara et le pilote Web Selenium pour en savoir plus sur l'automatisation Web. J'ai essayé d'actualiser une page en particulier avec Capybara. J'ai vu quelques méthodes mais elles ont chacune des problèmes qui les rendent impossibles dans certains cas. Le lien session.visit ne fait rien car la session est déjà sur ce lien. Je peux faire session.reset! mais ensuite je perds le login.Comment rafraîchir l'URL de Capybara dans Ruby

Les quelques autres méthodes que j'ai vues - n'utilisez pas la fonctionnalité d'attente intégrée de Capybara. Cela signifie que si la charge du serveur est importante - ou dans mes tests avec un débit DL/UL restreint, le 'rafraîchissement' se produit mais il essaie rapidement de trouver un champ dans la page suivante qui n'existe pas encore car il ne l'a pas t chargé.

Donc, ma question est spécifiquement - comment puis-je actualiser une page dans Capybara sans perdre la session de connexion en utilisant la fonctionnalité d'attente intégrée de Capybara?

Répondre

0

Puisque vous utilisez le sélénium, vous pouvez utiliser la branche maîtresse de Capybara et appelez

session.refresh 

ou vous pouvez coller avec la version actuelle et appelez

session.driver.browser.navigate.refresh 

Si la page vous essayez de rafraîchir était un POST il peut apparaître un modal "êtes-vous sûr que vous voulez resbumit", auquel cas vous auriez besoin de quelque chose comme

session.accept_confirm do 
    session.driver.browser.navigate.refresh 
end 
+0

Est-ce que session.refresh attend que la page soit rechargée? Imaginez que cette page fonctionne très lentement maintenant et j'ai session.refresh puis session.click_button ("Button_play"). Si Button_play n'est pas encore en ligne - mais peut être après une actualisation - session.refresh attendra-t-il? – Leon92

+0

@ Leon92 Les chargements de pages ne sont jamais garantis d'attendre. Vous devez définir une attente pour tout ce qui change après l'actualisation de la page. Si Button_play n'existait pas avant l'actualisation, alors click_button ('Button_play') 'attendrait que le bouton apparaisse (jusqu'à Capybara.default_wait_time secondes). Si vous avez besoin d'attendre plus longtemps, vous pouvez spécifier que dans l'appel 'click_button' - click_button ('Button_play', attendez: 60)' - attendez jusqu'à une minute pour que 'Button_play' apparaisse, puis cliquez dessus. –