2017-09-26 11 views
0

Je charge une page, puis je clique sur un élément de cette page. Actuellement j'utilise le sommeil pour cliquer dessus mais je ne me sens pas assez robuste (aussi, il disparaît après un moment).Watir n'attend pas que la page soit chargée

on(page1).buttonForNextPage.click 
    @myvariable = on(page2).target_link_element.wait_until_present().link.text 

Le wait_until_present() semble ne rien obtenir. Si je n'ajoute pas de sommeil, le code passe juste à travers. Ne fonctionne qu'avec le sommeil (3) mais je veux éviter cela.

En outre, j'utilise pageobjects gem pour mes pages.

+0

Lorsque le code passe à travers, quel est le comportement incorrect que vous voyez? Est-ce que '@ myvariable' est réglé sur la mauvaise valeur? –

+0

Je reçois l'élément Selenium n'existe pas de code. Il ne peut pas trouver target_link_element – qaispak

+0

Quelle version de Page-Object et Watir utilisez-vous? Pouvez-vous également partager la définition de 'target_link_element' et, idéalement, une page qui reproduit le problème? –

Répondre

2

Vous devriez passer à la dernière version de Watir, actuellement v6.8.4. Depuis la version 6.5.0, un certain nombre de corrections de bogues ont résolu le problème que vous rencontrez.

+0

Juste pour clarification. Watir devrait attendre que les pages soient chargées avant de passer à la page suivante par défaut, n'est-ce pas? – qaispak

+1

Oui et non. Lorsque vous cliquez sur un bouton/lien qui envoie un formulaire ou lance une navigation, le pilote sous-jacent attend que le chargement de la page se termine. Si le bouton/lien déclenche du JavaScript, ce qui à son tour provoque l'actualisation du navigateur, le pilote ne sait pas qu'il doit attendre. Cependant, la plupart des appels d'élément Watir attendront que l'élément apparaisse avant d'agir/d'inspecter. Bref, la plupart des cas vont attendre mais il y a des cas limites. –

+0

Comme je le pensais. -- Merci – qaispak