Attendez que l'élément de WebDriver - PageObject modèle
Aussi longtemps que j'utilise PageObject modèle, je me demandais où dois-je attendre pour l'élément des pages dynamiques. En supposant que nous avons méthode d'essai et pageObject classe. Dois-je faire quelque chose comme (dans la méthode d'essai):
- Cliquez sur le bouton
- Attendre élément à afficher
- Vérifier l'élément (contient par exemple. méthode isElementDisplayed())
Ou peut-être il ya d'autres bonnes pratiques à attendre pour l'élément? Peut-être faut-il attendre de l'élément dans la méthode isElementDisplayed qui est en PageObject.class?
OriginalL'auteur Robert | 2013-09-17
Vous devez vous connecter pour publier un commentaire.
Vous devez attendre que vos éléments dans votre page objet de la classe, pas dans la classe de test, parce que vos éléments doivent être définis dans la page objet de la classe, de la classe de test doit rien savoir de tout les éléments, de sélecteurs, ou similaire. Tests, à mon humble avis, ne devrait contenir que des chaînes d'appels de méthode que de décrire le test de débit, toutes les interactions avec le site web sous-jacents et les DOM devrait prendre place dans la Page de la classe d'Objet.
Donc trop verbeux méthode à attendre pendant un certain élément d'apparaître pourrait être quelque chose comme:
En clair, la fonction si l'interrogation du DOM pour 60 secondes (1 seconde) pour voir si l'élément existe dans les DOM et il est visible (moyens a la hauteur et la largeur de plus de 1px). Si l'élément existe (et est affiché), la fonction retourne l'élément trouvé et arrête le scrutin (bien que
isLoaded()
la méthode ne retourne pas l'élément dans ce cas particulier).Il est logique de les ignorer
NoSuchElementException
qui peut être levée parfindElement
méthode dans le cas où l'élément n'est pas trouvé, etStaleElementException
, ce qui indique qu'une référence à un élément, c'est maintenant "vicié" - l'élément n'apparaît plus sur le DOM de la page. Cela signifie que quelque chose (le plus souvent JS) a modifié les DOM et la référence n'est plus valide, d'où leWebDriver
besoin de regarder de nouveau.De parcours plus court code également pour l'astuce, quelque chose comme:
La la documentation est en fait assez bon sur ce.
EDIT: réponse au commentaire de:
Disons que vous avez un scénario où vous avez un bouton et après avoir cliqué sur ce bouton, une boîte de dialogue s'affiche et vous souhaitez interagir avec elle.
Et maintenant votre classe de test:
Non, il n'attend pas pour chaque élément, il attend l'élément que vous spécifiez, par exemple, le deuxième morceau de code attend "someWebElement" (un seul élément de type WebElement, pas la liste de tous les éléments définis ou quoi que ce soit). Si vous voulez attendre dans vos tests, ça voudrait dire que vous devez avoir cet élément défini dans votre classe de test et qui a battu le but d'objets de la page, donc je dirais que d'attendre seul dans votre page objets et si des éléments sont créés dynamiquement sur la page, alors vous devriez vous attendre à chaque fois pour que l'élément spécifique que vous souhaitez interagir avec.
OK, compris. Mais que faire si l'élément est présent après en cliquant sur certains boutons etc.?
j'ai édité la réponse
clickButtonAndWaitForTextbox() - ma principale question était à propos de cette méthode. Ok, donc nous devons attendre pour un élément à l'intérieur de l'cliquant sur. Alors, devrions-nous attendre élément toujours avant d'interagir avec elle, ou peut-être la vérification de son existence avant de l'interaction?
OriginalL'auteur Erki M.
Un autre concept efficace de la page de test(Depuis le sélénium 1) à partir de l'une des le sélénium test-cadres - ISFW peuvent être utilisés ici. Il est paresseux chargés de l'élément, composant personnalisé en fonction de auto et attendre (pas implicite attendre que réduire les performances), intégré méthodes d'attente avec élément et d'autres fonctionnalités qui sont très utiles pour l'ajax bases de l'application.
Il fournir des éléments pour l'élaboration de cas de test:
En outre Reporting est également descriptive.
OriginalL'auteur user861594