Passer de l'enfant à la fenêtre parent dans Selenium Webdriver
Je suis de la création de scripts de test en Sélénium WebSriver à l'aide d'Eclipse, et ont frappé un hic dans l'hypothèse où j'ai un parent de la fenêtre, je clique sur un lien sur cette fenêtre et une fenêtre s'ouvre. Je veux fermer la fenêtre enfant et de s'acquitter des fonctions de nouveau sur la fenêtre parent.
Mon code est comme ci-dessous:
public static void daysInStockSelectContract(InternetExplorerDriver driver) {
driver.findElement(By.xpath(".//*[@id='page-content']/table/tbody/tr[1]/td[1]/a")).click();
for(String winHandle : driver.getWindowHandles()) {
driver.switchTo().window(winHandle);
driver.close();
}
}
Lorsque j'exécute le code ci-dessus, l'enfant de la fenêtre reste ouverte pendant que le parent de la fenêtre se ferme, ce qui est l'effet inverse de ce que je voulais. Aussi une erreur comme suit est affiché dans la console:
"Exception in thread "main" org.openqa.le sélénium.à distance.SessionNotFoundException: session 1ff55fb6-71c9-4466-9993-32d7d9cae760 n'existe pas"
Je suis en utilisant IE WebDriver pour mon Sélénium scripts.
Mise à JOUR - 17/11/14
Subh, voici le code que j'ai utilisé à partir du lien que vous avez eu la bonté d'envoyer plus de qui, malheureusement, ne fonctionne pas.
public static void daysInStockSelectContract(InternetExplorerDriver driver) {
//get the parent handle before clicking on the link
String winHandleBefore = driver.getWindowHandle();
driver.findElement(By.xpath(".//*[@id='page-content']/table/tbody/tr[1]/td[1]/a")).click();
//the set will contain only the child window now. Switch to child window and close it.
for(String winHandle : driver.getWindowHandles()) {
driver.switchTo().window(winHandle);
}
driver.close();
driver.switchTo().window(winHandleBefore);
}
Vous devez vous connecter pour publier un commentaire.
Probablement, le changement de fenêtre enfant ne s'est pas passé correctement.
Donc, de pilote.close()' est la fermeture de la fenêtre parent, au lieu de la fenêtre enfant. Aussi, depuis la fenêtre parent a été fermé, il implique la session a été perdu qui donne l'erreur 'SessionNotFoundException'.
Ce lien va vous aider à correctement la commutation entre les fenêtres
Sur une autre note, juste un conseil. Plutôt que de passer "pilote" en tant que paramètre, pourquoi ne pas vous en faire une variable statique. Il sera facilement accessible à toutes les méthodes à l'intérieur de la classe, sous-classe de trop, et vous n'avez pas à vous soucier de passer à chaque fois à une méthode.. 🙂
Ci-dessous le code que vous avez demandé dans votre commentaire (sans rapport avec la question ci-dessus)
Mise À Jour Du Code 19/11/14
driver.switchTo().window(winHandle);
. Essayez d'exécuter le même code à l'aide de FirefoxDriver. Si il fonctionne s'il vous plaît laissez-moi savoir.Lorsque vous parcourez le windowHandles, la première manche est le parent de la poignée. Donc quand vous dites que
driver.close()
, la fenêtre parent est arriver fermé. Ceci peut être évité en utilisant le code suivant:texte fort pilote.switchTo().fenêtre(winHandle);
le pilote.close();
}
}
Si vous obtenez la taille de 1 (pas de windowHandles comme l'un) ou est d'obtenir le même message d'erreur, probablement à l'époque de la fenêtre est une zone d'alerte. Pour gérer la boîte d'alerte, vous pouvez utiliser le code suivant juste après avoir cliqué sur le lien.
Essayer ce code pour le débogage
J'ai réussi à résoudre ce problème en suivant les étapes décrites par Subh ci-dessus. En particulier, s'assurer que "Activer le Mode Protégé" est désactivé sur l'onglet 'Sécurité' des 'Options Internet'