Du pop-up en sélénium webdrivers
Alors je travaille avec le sélénium firefox webdrivers en c# winform et j'ai ce code ci-dessous pour obtenir le handle de la fenêtre contextuelle qui s'affiche lorsque vous cliquez sur le "webtraffic_popup_start_button" et il devrait obtenir le handle de la fenêtre mais le popup de la poignée est la même que celle en cours.
string current = driver.CurrentWindowHandle;
driver.FindElement(By.XPath("//*[@id='webtraffic_popup_start_button']")).Click();
Thread.Sleep(Sleep_Seconds);
popup = driver.CurrentWindowHandle;
Thread.Sleep(3000);
driver.SwitchTo().Window(current);
Thread.Sleep(1000);
L'aide de ce serait très apprécié merci
C'est ce que la pop up ressemble.
Veuillez expliquer actuelle. Voulez-vous dire de la fenêtre parent? Ou, est-il une autre pop-up?
Je ne sais pas vérifier la capture d'écran que j'ai mis en place
Je ne sais pas vérifier la capture d'écran que j'ai mis en place
OriginalL'auteur Coderz | 2014-12-22
Vous devez vous connecter pour publier un commentaire.
WebDriver ne fait absolument pas de suivi que ce soit de détecter la fenêtre au premier plan dans l'OS, et n'a pas de commutation automatique lorsque de nouvelles fenêtres de navigateur sont ouvertes. Cela signifie que la bonne façon d'obtenir le handle d'un nouvellement ouvert, la fenêtre popup est un processus multi-étapes. Pour ce faire, vous:
pouvez y revenir plus tard.
Dans le code à l'aide de l' .NET liaisons de langage, qui ressemblerait à quelque chose comme ceci:
Alternativement, si vous êtes en utilisant le .NET liaisons, il y a un
PopupWindowFinder
classe dans le WebDriver.Le soutien de l'assemblée qui est spécifiquement conçu pour effectuer ces opérations pour vous. À l'aide de cette classe est beaucoup plus simple.Je pense que c'est arrivé parce que quand elle surgit, il est déjà l'avant de la fenêtre.
Il a travaillé un peu, mais non je ne peux pas utiliser mon permis après l'utilisation du pilote.Close();
Dans le "faites ce que vous devez faire sur le pop-up du navigateur", ne vous faites quelque chose comme cliquer sur un lien ou un bouton qui ferme la fenêtre pop-up automatiquement? Si oui, vous pouvez omettre le
driver.Close
déclaration.Non, et il ne l'a jamais été. C'est une faute de frappe dans l'exemple de code que j'ai édité la réponse correcte.
OriginalL'auteur JimEvans
Si le enfin fenêtre ouverte est votre cible, puis simplement faire ce qui suit après le clic
MODIFIER
WindowHandles
propriété est explicitement non ordonnée. Il n'y a aucune garantie que la poignée de la nouvelle fenêtre qui s'ouvre sera le dernier de la liste, et il n'y a aucune garantie que la première fenêtre du navigateur sera le premier dans la liste. En outreDefaultContent
seulement des interrupteurs de haut niveau de l'image dans une fenêtre donnée; il n' pas naviguer entre les fenêtres.Merci de me donner l'intérieur de
WindowHandles
. Comment voulez-vous résoudre son problème alors?Voir ma réponse à la question de comment j'allais gérer le problème.
Cela a fonctionné parfait pour moi
OriginalL'auteur Saifur
J'ai un peu de code que vous pourriez aimer. La solution la plus rapide est d'utiliser Contextuel du Finder, mais j'ai fait ma propre méthode. Je n'aurais jamais compter sur le bon de commande la Fenêtre Poignées pour sélectionner la fenêtre appropriée. Fenêtre Du Finder:
Ma méthode Personnalisée. Fondamentalement, vous la passer à l'élément que vous souhaitez, cliquez, votre webdriver, et éventuellement le temps à attendre avant de chercher après vous cliquez sur l'élément.
Il prend tous vos poignées et fait une liste. Il utilise cette liste pour éliminer l'existant précédemment windows d'obtenir accidentellement commuté. Ensuite, il clique sur l'élément qui lance la nouvelle fenêtre. Il devrait toujours y avoir un certain délai après le clic, rien ne se passe instantanément. Et puis, il fait une nouvelle liste et compare l'encontre de l'ancien jusqu'à ce qu'il trouve une nouvelle fenêtre ou la boucle expire. Si elle ne parvient pas à trouver une nouvelle fenêtre, elle renvoie null, donc si vous avez une terrible webelement qui ne fonctionne pas toujours, vous pouvez faire un null vérifiez si le commutateur travaillé.
OriginalL'auteur Dominic Giallombardo