Die beste Möglichkeit zum Verfolgen und Durchlaufen von Registerkarten und Fenstern mithilfe von WindowHandles mit Selenium
P粉744691205
P粉744691205 2023-11-04 18:03:14
0
1
732

Wir arbeiten mit dem Selenium-Webtreiber für UI-Tests für Internet Explorer 11. In der Test-Webanwendung werden mehrere Bildschirme angezeigt. In einigen Tests hatten wir am Ende drei Browserfenster und damit drei Driver.WindowHandles. Um von einem WindowHandle zu einem anderen zu wechseln, erwarten wir, dass Driver.WindowHandles mit dem ältesten Fenster zuerst und dem neuesten Fenster zuletzt sortiert wird. Aber das ist nicht der Fall: Es ist völlig zufällig!

Da windowhandle eine GUID ist, erstellen wir am Ende ein Wörterbuch mit der WindowHandle-GUID als Schlüssel und dem Wert als Wert für den im Browserfenster geladenen Seitentyp. Dies führt aber auch dazu, dass das Wörterbuch beibehalten wird, wenn das Fenster geschlossen wird.

Scheint eine Menge Arbeit für so eine einfache Sache zu sein. Gibt es eine bessere Lösung?

P粉744691205
P粉744691205

Antworte allen(1)
P粉986937457

你说得非常正确:

在一次讨论中,Simon 明确提到:

因此,我们将引发 WebDriverWait ,然后每次打开新选项卡/窗口时收集窗口句柄,最后迭代窗口句柄和 switchTo().window(newly_opened) 根据需要:

Java:

package demo;

import java.util.Iterator;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class NEW_TAB_Handling {

    public static void main(String[] args)  {


        System.setProperty("webdriver.ie.driver", "C:\\Utility\\BrowserDrivers\\IEDriverServer.exe");
        WebDriver driver =  new InternetExplorerDriver();
        driver.get("http://www.google.com");
        String first_tab = driver.getWindowHandle();
        System.out.println("Working on Google");
        ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
        WebDriverWait wait = new WebDriverWait(driver,5);
        wait.until(ExpectedConditions.numberOfWindowsToBe(2));
        Set<String> s1 = driver.getWindowHandles();
        Iterator<String> i1 = s1.iterator();
        while(i1.hasNext())
        {
            String next_tab = i1.next();
            if (!first_tab.equalsIgnoreCase(next_tab))
            {
                driver.switchTo().window(next_tab);

                System.out.println("Working on Facebook");
            }
        }
        String second_tab = driver.getWindowHandle();
        ((JavascriptExecutor) driver).executeScript("window.open('http://youtube.com/');");
        wait.until(ExpectedConditions.numberOfWindowsToBe(3));
        Set<String> s2 = driver.getWindowHandles();
        Iterator<String> i2 = s2.iterator();
        while(i2.hasNext())
        {
            String next_tab = i2.next();
            if (!first_tab.equalsIgnoreCase(next_tab) && !second_tab.equalsIgnoreCase(next_tab))
            {
                driver.switchTo().window(next_tab);
                System.out.println("Working on Youtube");
            }
        }
        driver.quit();
        System.out.println("Quit the WebDriver instance");
    }
}

控制台输出:

Working on Google
Working on Facebook
Working on Youtube
Quit the WebDriver instance

其他

您可以在以下位置找到基于 的讨论在新选项卡中打开 Web Selenium + Python p>

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage