La commutation d'une nouvelle fenêtre avec le Sélénium/Rapporteur Javascript
La recherche d'un peu d'aide sur la façon dont je devrais être prise en main d'un nouveau "pop-up" de la fenêtre qui est déclenché à l'écran après que je clique sur un bouton "connexion".
Je suis en mesure d'obtenir à quand la fenêtre est de l'affichage, mais je ne crois pas que le code que j'utilise actuellement pour saisir la fenêtre "gérer" fonctionne correctement. Ma situation est un peu différente dans le fait que je suis en utilisant le rapporteur à l'intérieur de mes pages, mais la nouvelle fenêtre vient n'est PAS angulaire de la base, donc je dois passer de l'un à l'aide de seulement selenium WebDriver alors que je suis dans cette fenêtre. (Quelqu'un a une idée s'il pouvait y avoir des problèmes avec cette approche?)
Vous trouverez ci-dessous l'extrait de code que j'utilise pour créer le sélénium pilote, ainsi que ci-dessous que le commutateur "/poignée de maintien" de la nouvelle fenêtre qui s'est popping up. Je sais qu'il ne fonctionne pas correctement parce que je reçois "Aucun Élément" erreurs dans le code qui suit en essayant de trouver un formulaire sur la page.
//Create selenium webdriver /driver
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
//Now make sure that the new window is popping up and we are navigating correctly to it
var handlePromise = browser.driver.getAllWindowHandles();
handlePromise.then(function (handles) {
//parentHandle = handles[0];
var popUpHandle = handles[1];
//Change to new handle
browser.driver.switchTo().window(popUpHandle);
var popUpHandleFinal = browser.driver.getWindowHandle();
expect(popUpHandleFinal).toEqual(popUpHandle);
});
Couple de choses à ce sujet:
- Si je supprime le "navigateur" dans la ligne "du navigateur.le pilote.switchTo().fenêtre(popUpHandle)" donc, il se lit comme "pilote.switchTo().fenêtre(popUpHandle)" je recevoir en retour et l'erreur qui se lit comme" UnknownError: erreur inconnue: "nom" doit être une chaîne non vide" Après avoir fait quelques recherches sur ce qu'il est parce que le "switchTo()" méthode du conducteur ne peut pas être null. Cette erreur est effacée si je viens d'utiliser le code ci-dessus.
- Je ne suis pas sûr à 100% si je dois utiliser le rapporteur (global "navigateur" var) ou à l'aide de la droite "pilote" (Sélénium) que j'ai mis en avant ce que le moyen d'obtenir la windows.
Merci pour votre aide
Si vous êtes déjà dans le cadre d'un travail de rapporteur pilote, vous n'avez pas besoin de démarrer un distinct webdriver-instance en interne. (Qui sera probablement confondre le navigateur pour avoir deux contrôleurs à distance). Le rapporteur expose le raw webdriver son aide via
browser.driver
, donc ça devrait être correct à utiliser.C'était mon principal problème. Je vous remercie. Une fois que j'ai pris paramètre de l'autre conducteur, puis retourna à l'aide du navigateur.le pilote, après quelques essais, j'ai été en mesure de l'obtenir pour fonctionner.
OriginalL'auteur parchambeau | 2015-02-28
Vous devez vous connecter pour publier un commentaire.
Que de la dernière version de Rapporteur (v2.2) il ne devrait pas être un problème dans l'utilisation de rapporteur, poignées de fenêtre, qui retourne un tableau de windows qui sont actuellement affichés. Que P. T l'a souligné il n'est pas nécessaire d'invoquer un pilote séparé instance, mais un
browser
variable globale de travail. La fenêtre qui invoque popup a index de tableau de0
et fenêtre pop-up va avoir un index de tableau de1
. Ci-dessous est un échantillon de la commutation de la fenêtre pop-up pour travailler sur.Espère que cette aide.
Salut, j'ai essayé le code mais le même message d'erreur: UnknownError: erreur inconnue: "nom" doit être une chaîne non vide" ci-Dessous est le code var handlePromise = navigateur.le pilote.getAllWindowHandles(); handlePromise.ensuite(function (poignées) { // parentHandle = poignées[0]; var popUpHandle = poignées[1]; // on change à nouveau la poignée de navigateur.le pilote.switchTo().fenêtre(popUpHandle); });
vous pouvez déboguer un peu plus et de me dire sur quelle ligne vous êtes confronté à cette erreur? Aussi pouvez-vous vérifier le
handles
longueur du tableau? Je pense que vous n'avez pas de fenêtres, mais seulement si vous ne pouvez pas passerhandles[1]
. MerciPouvez-vous suggérer d'en faire une fonction générique? Je veux que cette fonction soit utilisée et passer à l'onglet suivant, indépendamment de sa position dans chrome fenêtre. Donc, si mon navigateur est la création d'un nouvel onglet, je devrais passer à ce nouvel onglet et si mon nouvel onglet est de créer un autre onglet de mon navigateur, l'accent devrait passer à ce nouvel onglet.
créer une fonction qui appelle simplement passer à une nouvelle fenêtre et vous pouvez l'utiliser chaque fois que vous souhaitez passer à une nouvelle fenêtre, ce qui serait la dernière fenêtre de l'élément de tableau. Pour obtenir le dernier élément du tableau d'utilisation
array.length-1
opération. Exemple -browser.switchTo().window(handles[handles.length-1])
- ce qui va passer à la dernière fenêtre c'est ouverte. Espérons que cela aide.OriginalL'auteur Girish Sortur
Si vous en cliquant sur un lien ou un bouton pour ouvrir une fenêtre pop-up, ajouter un peu d'attente après cliquez sur l'aide de
browser.sleep(ms)
.Cela a fonctionné pour moi et de s'en débarrasser une erreur "missing" poignée "paramètre"
OriginalL'auteur Ajay Patil
Si vous appelez https:// url et encore rediriger vers http:// url alors ce popup est à venir en raison de problème de sécurité.
1 - Vous devez configurer l'application en https:// ou http://
OriginalL'auteur Manas