[FIXED] Wechseln zu einem neuen Fenster mit Selenium/Protractor Javascript

Ausgabe

Ich suche nach Hilfe, wie ich ein neues „Popup“-Fenster erreichen soll, das angezeigt wird, nachdem ich auf eine „Anmelden“-Schaltfläche geklickt habe.

Ich kann erreichen, wann das Fenster angezeigt wird, aber ich glaube nicht, dass der Code, den ich derzeit verwende, um den “Handle” des Fensters zu greifen, ordnungsgemäß funktioniert. Meine Situation ist insofern etwas anders, als ich den Winkelmesser in meinen Seiten verwende, aber das neue Fenster, das angezeigt wird, NICHT winkelbasiert ist, sodass ich auf die Verwendung von Selenium WebDriver umschalten muss, während ich mich in diesem Fenster befinde. (Hat jemand eine Idee, ob es Probleme mit diesem Ansatz geben könnte?)

Unten finden Sie das Code-Snippet, das ich verwende, um den Selenium-Treiber zu erstellen, sowie darunter den Versuch, “zu / Grab Handle” des neuen Fensters zu wechseln, das auftaucht. Ich weiß, dass es nicht richtig funktioniert, weil ich im folgenden Code immer wieder Fehler “No Such Element” erhalte, wenn ich versuche, ein Formular auf der Seite zu finden.

    // 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);
    });

Paar Dinge dazu:

  1. Wenn ich den „Browser“ in der Zeile „browser.driver.switchTo().window(popUpHandle)“ entferne, sodass er als „driver.switchTo().window(popUpHandle)“ lautet, erhalte ich eine Fehlermeldung zurück, die als „UnknownError“ lautet : unknown error: ‘name’ must be a nonempty string” Nach einiger Suche danach liegt es daran, dass die Methode “switchTo()” auf dem Treiber nicht null sein kann. Dieser Fehler wird behoben, wenn ich einfach den oben gezeigten Code verwende.

  2. Ich bin mir nicht 100% sicher, ob ich den Winkelmesser (globale “Browser”-Variable) oder den geraden “Treiber” (Selenium) verwenden soll, den ich zuvor eingestellt habe, um die Fenster zu erhalten.

Danke für Ihre Hilfe

Lösung

Ab der neuesten Version von Protractor (v2.2) sollte es kein Problem bei der Verwendung von Winkelmesser-Fenstergriffen geben, die ein Array von Fenstern zurückgeben, die derzeit angezeigt werden. Wie PT darauf hingewiesen hat, ist es nicht erforderlich, eine separate Treiberinstanz aufzurufen, aber eine browserglobale Variable wird funktionieren. Das Fenster, das Popup aufruft, hat einen Array-Index von 0und das Popup-Fenster hat einen Array-Index von 1. Unten sehen Sie ein Beispiel für den Wechsel zum Popup-Fenster, um daran zu arbeiten.

browser.getAllWindowHandles().then(function(handles){
    browser.switchTo().window(handles[1]).then(function(){
        //do your stuff on the pop up window
    });
});

Hoffe das hilft.


Beantwortet von –
giri-sh


Antwort geprüft von –
Marilyn (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like