Dans Page Object Model, toutes les classes doivent-elles partager une seule instance de pilote?

Dec 19 2020

Je peux créer un fichier BaseTest.java et déclarer le pilote WebDriver statique public; dedans. Ensuite, toutes les classes peuvent étendre et utiliser la même référence de pilote.

Ensuite, toutes mes classes de test peuvent utiliser la même instance.

Puis-je utiliser:

driver = new ChromeDriver(); 

dans chaque méthode de test ou scénario de concombre. Je suis confus, comment utiliser le pilote. Le pilote est-il une session de fenêtre Chrome?

Réponses

2 JoãoFarias Dec 19 2020 at 16:31

Le pilote est-il une session de fenêtre Chrome?

Non. Un ChromeDriver représente un serveur qui contrôle un navigateur Chrome exécuté localement. Le serveur contrôlera le cycle de vie du navigateur, comme les actions d'initiation, de mise à mort et de contrôle.

Pour plus de détails, consultez la documentation

Puis-je créer un pilote = new ChromeDriver (); dans chaque méthode de test ou scénario de concombre

Oui, mais cela dépendra de votre contexte. Si vous souhaitez que plusieurs navigateurs s'exécutent indépendamment dans certaines actions, vous pouvez créer un nouveau pilote.

Prime:

Je peux créer un fichier BaseTest.java et déclarer le pilote WebDriver statique public; dedans. Ensuite, toutes les classes peuvent étendre et utiliser la même référence de pilote.

Cela peut être dangereux. L'héritage est la forme de couplage la plus forte que vous puissiez faire et le fait d'avoir une variable globale peut entraîner des changements de comportements très difficiles à comprendre. Vous souhaiterez peut-être refactoriser votre code afin que les instances de pilote soient injectées dans vos objets de page . De cette façon, vous ne couplez pas les objets de page à une variable globale et vous pouvez facilement créer des tests unitaires pour eux en injectant un double test pour le pilote.

2 PDHide Dec 19 2020 at 19:39

Qu'est-ce que chromedriver:

chromedriver a un code qui peut interagir avec le navigateur. Ces commandes sont exposées via une API (c'est ce que vous voyez lorsque chromedriver a démarré sur localhost: 14563). À partir du code, nous accédons à ces points de terminaison d'API pour dire au pilote Chrome de faire quelque chose.

Exemple, lorsque vous dites elem.click (), le sélénium parle à l'API et dit à chromedriver de cliquer sur l'élément spécifié dans le navigateur. Et le pilote chrome le fait et renvoie la réponse du navigateur et la renvoie au code

Pourquoi nous avons besoin d'une classe de base

Ceci permet de garantir que les sessions de pilote sont transmises entre différentes classes. Sinon, vous ne pourrez pas faire quelque chose comme

   page1.sendpassword()
   page1.sendusername()
   page1.submit()
   page2.adduser()

Parce que si vous avez une session de pilote différente pour la page1 et la page2,

puis une fois que vous démarrez page2.adduser () le pilote chrome sera démarré à nouveau et vos sessions de connexion précédentes ne seront pas disponibles, vous devez donc vous reconnecter

Vous ne pouvez pas non plus ajouter de captures d'écran ou d'actions spécifiques au pilote dans les classes d'écouteur pour la création de rapports

Vous pouvez en savoir plus sur la classe de base sur:

Quel est le but de la création d'une classe BaseTest qui déclare un objet WebDriver statique global dans le cadre POM?

AlexeyR. Dec 19 2020 at 16:33

L'instance WebDriver dans votre code est un type de canal que vous utilisez pour interagir avec une seule session d'implémentation de pilote Web. Fondamentalement, ce que vous utilisez dans votre code est ce qu'on appelle la liaison client .

Un WebDriver est un serveur HTTP qui expose l'API REST vers vos liaisons client (par exemple les bibliothèques Java) d'un côté et peut contrôler le navigateur de l'autre côté.

Ainsi, tout votre code supposé fonctionner avec la même session Chrome (conservation des cookies, etc.) doit partager la même instance de pilote Web.

Rien ne vous empêche d'instancier un autre plongeur dans votre code. Grâce à cette nouvelle instance, vous obtiendrez le contrôle d'une session de navigateur isolée parallèle différente.