5

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
  • PageObjects

    1. Les méthodes publiques représentent e services e que la page offre

      Valider, télécharger, télécharger plusieurs, annuler, clair

    2. 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

    3. 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

    4. 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

Répondre

0

j'ai un peu différent approche lors de l'écriture des objets de page. Traduit selon vos termes La méthode load() se termine par une attente conditionnelle assurant que la page contienne ce que vous désirez. Ensuite, je n'ai pas besoin d'isLoaded() - je suis là ou Exception est levée.

Les composants dans la page sont les propriétés de la page les contenant et je définis la relation bidirectionnelle entre un composant et la page. Ce ne sont pas des objets de page entièrement fonctionnels. Peut-être que vos formes peuvent être modélisées de cette façon aussi.

0

Le composant chargeable est une extension du modèle d'objet Page. La classe LoadableComponent de la bibliothèque WebDriver aidera les développeurs de tests à s'assurer que la page ou un composant de la page est chargé avec succès. Cela réduit énormément les efforts pour déboguer vos cas de test. L'objet page doit étendre cette composante chargeable classe abstraite et par conséquent, il est tenu de fournir la mise en œuvre des deux méthodes suivantes:

charge vide abstraite protégée()

abstract void protégé IsLoaded() throws java.lang.Error

La page ou le composant qui doit être chargé dans les méthodes load() et isLoaded() détermine si la page est entièrement chargée ou non. Si ce n'est pas complètement chargé, une erreur se produit.

https://code.google.com/p/selenium/wiki/LoadableComponent

+0

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

Questions connexes