Dans Page Object Model, toutes les classes doivent-elles partager une seule instance de pilote?
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
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.
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?
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.