J'essaie d'ajouter un nouveau contact en lisant les données de test à partir d'un fichier Excel. Les données de la première ligne sont créées avec succès. Après cela, pour la deuxième ligne, je reçois une erreur en tant que "org.openqa.selenium.NoSuchSessionException: l'ID de session est nul. Utiliser WebDriver après avoir appelé quit ()?"
J'ai revérifié mon code et d'autres cas de test fonctionnent correctement . Je suis le flux suivant Allez dans Base url-> Login-> Add contacts-> driver.quit ()
@AfterMethod
public void teardown() {
driver.quit();
}
Je m'attends à ce que les données soient lues et que plusieurs contacts soient ajoutés p >
4 Réponses :
Vous utilisez @AfterMethod ici et @AfterMethod est exécuté après chaque exécution de la méthode et dans votre cas, après une itération depuis Excel, il est exécuté et le l'instance de pilote se termine parce que vous avez utilisé driver.quit () ici.
Pour résoudre ce problème, vous devez utiliser @AfterTest au lieu de @AfterMethod car @AfterTest ne s'exécuterait que lorsque toutes les lignes de Excel est exécuté et l'exécution de votre scénario de test est terminée.
Je souhaite terminer l'instance du pilote après avoir lu une ligne du fichier et le test doit recommencer à partir de la connexion. Le flux est comme prévu. Une fois l'AfterMethod exécuté, BeforeMethod contient le code pour l'appel du navigateur et du flux jusqu'à AddNewContactsPage
OK, vous avez votre scénario, vous pouvez donc y parvenir en utilisant @BeforeClass et AfterClass, alors utilisez-les au lieu de BeforeMethod et AfterMethod et faites-moi savoir si cela fonctionne.
Vous lisez des données à partir d'Excel et votre premier parcours est réussi.
Votre deuxième cheminement échouera, car vous avez expiré l'appel du pilote dans l'annotation @AfterMethod. L'annotation @AfterMethod s'exécutera après chaque annotation @Test. Dans votre cas, en tant que pilote expirant dans AfterMethod et s'il va pour plus de @Test, il a échoué.
Dans votre cas, traversez comme:
Si 3 lignes excel:
@BeforeMethod(if applicable) 1st Row @AfterMEthod @BeforeMethod(if applicable) 2nd Row @AfterMEthod @BeforeMethod(if applicable) 3rd Row @AfterMEthod
Vous devez comprendre le cycle de vie de l'annotation TestNG, quelle annotation appellera quand.
Voici l'exemple le plus simple:
Il est recommandé de définir driver.quite ( ) dans l'annotation @AfterSuite.
Cette erreur survient lorsque vous utilisez l'instance de pilote, sur laquelle vous avez déjà appelé la méthode quit () ou close (), pour toute autre opération. Assurez-vous simplement de réinitialiser l'instance du pilote avant de l'utiliser à nouveau. Comme vous l'avez appelé driver.quit () dans @AfterMethod, initialisez l'instance de pilote dans @BeforeMethod comme:
@BeforeMethod
public void testMethodInitialize() {
driver = new ChromeDriver();
}
utilisez:
@BeforeMethod
public void teardown() {
if(driver != null){
driver.quit();
}
}
}
@AfterMethod
public void initialize() {
if(driver == null){
//initialize your driver(webdriver or RemoteWebdriver)
driver = new ChromeDriver();
}
p >
Voudriez-vous poster plus de votre code? Surtout la partie où vous appelez driver.get ().
J'ai répondu, veuillez vérifier et faites-moi savoir si cela aide.