Comment obtenir le Sélénium et TestNG pour ouvrir un navigateur pour exécuter des tests dans plusieurs catégories
Je suis en utilisant le Sélénium avec TestNG pour tester un site web. J'ai créé à l'aide de tests Selenium IDE et exporté à TestNG avec chaque test étant une méthode dans une classe. Par exemple,
Pour les tests de connexion il y a une classe de Connexion qui a des méthodes testLogin(), testLogin2 (), etc
Pour l'inscription des tests il y a une Inscription à la classe a des méthodes testSignup(), testSignup2(), etc
Je suis en utilisant Ant pour exécuter les tests qui fonctionne bien sauf que chaque classe va ouvrir un navigateur et ensuite l'exécuter ses méthodes, par exemple, si j'ai cinq classes, les cinq navigateurs ouverts simultanément et ensuite exécuter les tests.
Ce que je veux est d'obtenir Ant/Selenium/TestNG à il suffit d'ouvrir un navigateur et ensuite exécuter tous les tests (dans le même navigateur) dans toutes les classes que j'ai spécifié dans testng.xml. En utilisant l'exemple ci-dessus, j'en veux un navigateur pour l'ouvrir puis exécutez testLogin(), testLogin2(), testSignup(), testSignup2().
Si ce n'est pas possible, je veux ouvrir un navigateur, lancer tous les tests d'une classe puis fermez le navigateur, puis d'en ouvrir un autre navigateur, puis exécutez l'ensemble des méthodes de test de la classe suivante.
Toute aide appréciée. Merci à l'avance.
OriginalL'auteur | 2009-07-19
Vous devez vous connecter pour publier un commentaire.
Aujourd'hui, j'ai trouvé la réponse qui fonctionne pour moi. Donnez-moi quelques minutes pour rassembler tous les exemples de code 🙂
Init.java
TemplateForClasses.java
FirstGroupOfTests.java
idée:
Ce code a été testé mais pour l'instant je l'ai pris à partir du haut de ma tête peut-être que j'éditerai demain pour le rendre plus exact.
Mise à jour:
Ce résultat est basé sur testng.org documentation + quelques questions posées par moi sur stackoverflow + quelques réponses trouvées sur plusieurs forums/groupes de
Je dois ajouter que je suis en cours d'exécution testng par programmation et je suis de produire un document xml à la volée (comme c'est fait sur documentation.org). Je suis à l'utiliser tout en un paquet, j'ai ajouté le forfait pour le xml, inclus seulement les classes Init + ceux qui héritent de TemplateForClasses. Si vous avez besoin que xml, laissez-moi savoir.
OriginalL'auteur Ula Karzelek
Je l'ai fait avec le Printemps de l'injection de dépendance. Et le code d'initialisation est dans une usine. J'avais besoin d'un moyen d'avoir une Sélénium instance partagée non seulement entre les tests, mais entre les classes d'aide. Très rarement est le sélénium.someMethod() appelée directement dans les tests. Il est plus comme une aide.goToSomePage() ou preferencesPage.changePassword(....).
Il pourrait être considéré comme une mauvaise idée d'avoir une Sélénium instance partagée entre les tests, mais les quelques bugs il a apporté n'étaient pas faciles à trouver. Les tests sont exécutés séquentiellement et le Sélénium objet n'a pas besoin d'être thread-safe. L'état de l'objet doit être cohérente.
Pour info, le Printemps est un framework Java et l'injection de Dépendance est seulement une partie. D'autres DI cadres comme Guice peut bien sûr être utilisé à la place.
OriginalL'auteur Pierre Gardin
Moi aussi j'ai été coincé dans le même problème depuis quelques temps. Je vais l'expliquer dans les termes les plus simples possibles. Considérons l'exemple suivant:
Désormais, chaque fois que nous courons ces méthodes de test, il va exécuter le code dans le constructeur de la classe parent de sélénium.start(); c'est alors que les multiples navigateurs de tous les ouvrir sur votre écran.
Maintenant, un par un, les méthodes d'essai sera exécuté - supposons que les tests de la classe B sont exécutées ils seront qui se passe dans une fenêtre, pour la classe C un autre et ainsi de suite.
Donc, fondamentalement, tout ce que vous avez à faire est de retirer la start() code du constructeur parent et le mettre quelque part dans les classes B, C et D.
Aussi longtemps que vous continuez à travailler avec l'un de sélénium objet tout ce qui va se passer dans une fenêtre de navigateur. Lorsque vous mettez start(); que le navigateur va s'ouvrir (si elle n'était pas ouvert) et une nouvelle session est créée. stop(); et la session est terminée.
Le flux de contrôle va comme ça=>
Donc, si vous pouvez trouver un moyen de continuer à utiliser le même sélénium objet avec seulement 1 start() et 1 stop() pour l'ensemble de la séquence d'exécution indiqué ci-dessus, l'exécution d'un test qui va se passer dans une seule fenêtre de navigateur.
Si vous mettez start() code dans Une classe et code d'arrêt dans chaque B,C et D alors vous aurez 3 fenêtres ouvertes et un par un ils vont fermer d'exécution progresse.
Si vous mettez start() et stop() code, individuellement, B,C et D, puis vous verrez un navigateur de l'ouverture, de l'exécution des cas de test, de clôture. Un autre va alors s'ouvrir, exécuter des cas de test pour C, à proximité etc.
Espère que cette aide. 🙂
OriginalL'auteur