Wechseln Sie zwischen Tabs mit Selenium WebDriver mit Java

Lesezeit: 6 Minuten

Wechseln Sie zwischen Tabs mit Selenium WebDriver mit Java
Umesh Kumar

Verwenden von Selenium WebDriver mit Java. Ich versuche, eine Funktionalität zu automatisieren, bei der ich eine neue Registerkarte öffnen muss, einige Vorgänge dort ausführen und zur vorherigen Registerkarte (übergeordnet) zurückkehren muss. Ich habe den Schaltergriff verwendet, aber er funktioniert nicht. Und eine seltsame Sache, dass die beiden Registerkarten denselben Fenstergriff haben, aufgrund dessen ich nicht zwischen den Registerkarten wechseln kann.

Wenn ich es jedoch mit verschiedenen Firefox-Fenstern versuche, funktioniert es, aber für die Registerkarte funktioniert es nicht.

Wie kann ich Tabs wechseln? Oder wie kann ich Registerkarten wechseln, ohne das Fensterhandle zu verwenden, da das Fensterhandle in meinem Fall für beide Registerkarten gleich ist?

(Ich habe beobachtet, dass beim Öffnen verschiedener Registerkarten im selben Fenster das Fensterhandle gleich bleibt.)

  • Ich denke, 2 Registerkarten sind in den meisten Fällen mit 2 Fenstern identisch

    – Harshavardhan Konakanchi

    14. Mai 2013 um 10:31 Uhr

  • Bitte sehen Sie: riponalwasim.blogspot.com/2020/05/…

    – Ripon Al Wasim

    13. Mai 2020 um 17:09 Uhr

    psdbComponent.clickDocumentLink();
    ArrayList<String> tabs2 = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs2.get(1));
    driver.close();
    driver.switchTo().window(tabs2.get(0));

Dieser Code hat bei mir perfekt funktioniert. Versuch es. Sie müssen Ihren Treiber immer auf einen neuen Tab umschalten, bevor Sie etwas auf einem neuen Tab tun möchten.

  • Registerkarten sind keine Fenster. Ich vermute, dass es im Firefox nicht funktioniert.

    – Alex78191

    10. Juli 2017 um 0:43 Uhr

  • Diese Antwort setzt die Reihenfolge in driver.getWindowHandles() voraus. Diese Methode gibt ein Set zurück und garantiert daher keine Bestellung auf Vertragsebene. Vielleicht gibt Ihre WebDriver-Implementierung eine Set-Implementierung zurück, die die Ordnung garantiert, aber warum das Risiko eingehen?

    – Der Dolch von Gilbert Arenas

    28. Februar 2018 um 11:25 Uhr

  • Bei Verwendung von ChromeDriver 2.33 gibt getWindowHandles() ein LinkedHashSet zurück, sodass der Zugriff über den Index gut funktioniert. Beachten Sie, dass Sie getAt() anstelle von get() verwenden müssen

    – Saurer Mönch

    15. März 2018 um 13:32 Uhr

Wechseln Sie zwischen Tabs mit Selenium WebDriver mit Java
Jordan Silva

Dies ist eine einfache Lösung, um einen neuen Tab zu öffnen, den Fokus darauf zu ändern, den Tab zu schließen und den Fokus auf den alten/ursprünglichen Tab zurückzusetzen:

@Test
public void testTabs() {
    driver.get("https://business.twitter.com/start-advertising");
    assertStartAdvertising();

    // considering that there is only one tab opened in that point.
    String oldTab = driver.getWindowHandle();
    driver.findElement(By.linkText("Twitter Advertising Blog")).click();
    ArrayList<String> newTab = new ArrayList<String>(driver.getWindowHandles());
    newTab.remove(oldTab);
    // change focus to new tab
    driver.switchTo().window(newTab.get(0));
    assertAdvertisingBlog();

    // Do what you want here, you are in the new tab

    driver.close();
    // change focus back to old tab
    driver.switchTo().window(oldTab);
    assertStartAdvertising();

    // Do what you want here, you are in the old tab
}

private void assertStartAdvertising() {
    assertEquals("Start Advertising | Twitter for Business", driver.getTitle());
}

private void assertAdvertisingBlog() {
    assertEquals("Twitter Advertising", driver.getTitle());
}

  • Ich verwende den Chrome-Treiber und darin, wenn ich die Zeile “driver.switchTo().window(newTab.get(0));” verwende. Ein neues Fenster wird zusammen mit einem neuen Tab geöffnet … Irgendeine Idee, warum das passiert?

    – Lucia

    1. August 2016 um 8:31 Uhr

  • Ich habe es nicht überprüft, aber ich vermute, dass es die Browserkonfiguration ist.

    – Jordan Silva

    12. April 2017 um 15:35 Uhr

Es gibt einen Unterschied, wie der Webtreiber mit verschiedenen Fenstern umgeht und wie er mit verschiedenen Registerkarten umgeht.

Fall 1:

Falls mehrere Fenster vorhanden sind, kann der folgende Code helfen:

//Get the current window handle
String windowHandle = driver.getWindowHandle();

//Get the list of window handles
ArrayList tabs = new ArrayList (driver.getWindowHandles());
System.out.println(tabs.size());
//Use the list of window handles to switch between windows
driver.switchTo().window(tabs.get(0));

//Switch back to original window
driver.switchTo().window(mainWindowHandle);

Fall 2:

Falls mehrere Registerkarten im selben Fenster vorhanden sind, gibt es nur ein Fensterhandle. Daher bleibt das Steuerelement beim Wechseln zwischen Fenstergriffen auf derselben Registerkarte.
In diesem Fall ist es sinnvoller, mit Strg + \t (Strg + Tab) zwischen den Registerkarten zu wechseln.

//Open a new tab using Ctrl + t
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
//Switch between tabs using Ctrl + \t
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");

Ausführlicher Beispielcode finden Sie hier:
http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

  • JAWOHL. Dies ist die erste Antwort, die anzeigt, dass es nur ein einziges Fensterhandle gibt, und das ist nicht dasselbe wie eine Registerkarte. Ich weiß nicht, wie die anderen Lösungen überhaupt funktionieren. Wie erhält getWindowHandles die Liste der Registerkarten für sie? Es bekommt nur Fenstergriffe für mich im IE (ich weiß, IE, Blech)

    – BClaydon

    13. Juni 2016 um 18:30 Uhr

Arbeiten Sie herum

Annahme : Durch Klicken auf etwas auf Ihrer Webseite wird ein neuer Tab geöffnet.

Verwenden Sie die folgende Logik, um zur zweiten Registerkarte zu wechseln.

new Actions(driver).sendKeys(driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(driver.findElement(By.tagName("html")),Keys.NUMPAD2).build().perform();

Auf die gleiche Weise können Sie wieder zurück zum ersten Tab wechseln.

new Actions(driver).sendKeys(driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(driver.findElement(By.tagName("html")),Keys.NUMPAD1).build().perform();

Seit der driver.window_handles ist nicht in ordnung, eine bessere lösung ist dies.

Wechseln Sie zuerst mit dem Shortcut zum ersten Tab Control + X um im Browserfenster auf den ‘x’-ten Reiter zu wechseln .

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "1");
# goes to 1st tab

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "4");
# goes to 4th tab if its exists or goes to last tab.

Wechseln Sie zwischen Tabs mit Selenium WebDriver mit Java
Vishwak

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN);
    WebElement e = driver.findElement(By
            .xpath("html/body/header/div/div[1]/nav/a"));
e.sendKeys(selectLinkOpeninNewTab);//to open the link in a current page in to the browsers new tab

    e.sendKeys(Keys.CONTROL + "\t");//to move focus to next tab in same browser
    try {
        Thread.sleep(8000);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    //to wait some time in that tab
    e.sendKeys(Keys.CONTROL + "\t");//to switch the focus to old tab again

Hoffe es hilft dir..

1647259028 764 Wechseln Sie zwischen Tabs mit Selenium WebDriver mit Java
Ed Ram

Das erste, was Sie tun müssen, ist, einen neuen Tab zu öffnen und den Handle-Namen zu speichern. Es ist am besten, dies mit Javascript und nicht mit Tasten (Strg + T) zu tun, da Schlüssel auf Automatisierungsservern nicht immer verfügbar sind. Beispiel:

public static String openNewTab(String url) {
    executeJavaScript("window.parent = window.open('parent');");
    ArrayList<String> tabs = new ArrayList<String>(bot.driver.getWindowHandles());
    String handleName = tabs.get(1);
    bot.driver.switchTo().window(handleName);
    System.setProperty("current.window.handle", handleName);
    bot.driver.get(url);
    return handleName;
}

Als zweites müssen Sie zwischen den Registerkarten wechseln. Wenn Sie dies nur durch Wechseln von Fenstergriffen tun, wird dies nicht immer funktionieren, da die Registerkarte, an der Sie arbeiten, nicht immer im Fokus ist und Selenium von Zeit zu Zeit fehlschlägt. Wie gesagt, es ist ein bisschen problematisch, Schlüssel zu verwenden, und Javascript unterstützt das Wechseln der Registerkarten nicht wirklich, also habe ich Warnungen verwendet, um die Registerkarten zu wechseln, und es hat wie ein Zauber funktioniert:

public static void switchTab(int tabNumber, String handleName) {
        driver.switchTo().window(handleName);
        System.setProperty("current.window.handle", handleName);
        if (tabNumber==1)
            executeJavaScript("alert(\"alert\");");
        else
            executeJavaScript("parent.alert(\"alert\");");
        bot.wait(1000);
        driver.switchTo().alert().accept();
    }

1001430cookie-checkWechseln Sie zwischen Tabs mit Selenium WebDriver mit Java

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy