J'ai du mal à m'habituer au modèle WebDriver PageObject. Veuillez partager votre expérience et vos façons d'utiliser le pattern PageObjects et loadableComponents. Comme PageObject représente généralement un composant ou une fonctionnalité, il m'est apparu au début que je devais l'utiliser pour faire des choses dans load() et voir si ça fait ce qu'il devrait dans isLoaded(). Puis j'ai réalisé qu'il ne devrait être utilisé que pour "charger" des objets (éventuellement initialisation) comme c'est le cas pour se déplacer sur un site web, chaque objet ayant sa propre URL. Et en utilisant isLoaded() pour tester si l'objet est prêt à être testé. Mais si vous avez un soumissionnaire de commande JavaScript complexe à tester, c'est composé d'un uploader de fichier JS, un formulaire JS basé sur 2 parties indépendantes et il y a trois types de commandes, vous ne bougez nulle part (en ce qui concerne l'URL), juste l'état des éléments change.Comment utiliser WebDriver/Selenium 2 LoadComponents dans le modèle PageObjects?
Considérons la méthode get(). Vous obtenez dans la page avec le formulaire interactif. Il est chargé lorsque le formulaire existe sur la page. Ensuite, vous avez les objets form1 et form2 ... à quoi devraient ressembler leurs méthodes load() et isLoaded(), ils sont prêts à l'action tout de suite car ils n'ont pas besoin de chargement, ils testent simplement leurs services.
C'est un désordre, on ne sait pas si la méthode isLoaded() est utilisée pour vérifier si l'objet est chargé, ou si l'objet a été chargé et a été configuré correctement. Mais je suppose que la première est correcte et que la validité de la mise en place devrait être garantie dans le cadre des tests.
Scénario:
Testing first part of html form - test that field client side validation works
Testing the second one that depends on the first one
Testing the following file uploader - upload, canceling, clearing, order, fileIDs
Testing the overall html form submission - ServerSide validation errors, results
La documentation dit:
- LoadableComponent
-
Les méthodes publiques représentent e services e que la page offre
Valider, télécharger, télécharger plusieurs, annuler, clair
Essayez de ne pas exposer les entrailles de la page
La seule chose qui me vient est d'avoir L'instance du pilote est cachée à UnitTests et n'utilise que PageObjects pour conserver tous les noms de champ, les noms de classe css dans PageObjects + fournissent des données d'entrée et affirment le résultat booléen des services/fonctionnalités
Les méthodes renvoient d'autres PageObjects
C'est la chose la plus difficile à faire. Avoir 4 objets de page pour une forme interactive ne semble pas naturel. Ils recommandent Form1, Form2 (Form1), Upload (Form2), Submit (Upload), bien que je trouve le chaînage et la remise d'une référence à l'objet précédent très chaotique. Appeler get() sur chacun d'eux dans une méthode de test semble mieux.Mais je pense que l'idée est de ne pas exposer l'instance du pilote aux essais, mais utilisez uniquement PageObjects qui utilisent par exemple du pilote interne
résultats différents pour la même action sont modélisés comme des méthodes différentes je suppose que cela signifie qu'il ne devrait pas être décidé sur la validité de cette action sur le côté objet page, mais du côté de test
Savez-vous si IsLoaded sera appelé en premier? De cette façon, pour éviter toute redondance, rechargez la page si nous sommes déjà sur la page. – CodyK