Heim >Backend-Entwicklung >C++ >Wie kann ich mit den WindowHandles von Selenium zuverlässig durch Browser-Registerkarten und Windows iterieren?

Wie kann ich mit den WindowHandles von Selenium zuverlässig durch Browser-Registerkarten und Windows iterieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-27 02:51:07717Durchsuche

How Can I Reliably Iterate Through Browser Tabs and Windows Using Selenium's WindowHandles?

Die beste Möglichkeit, mit den WindowHandles von Selenium über Registerkarten und Fenster zu iterieren

Frage:

Bei der Automatisierung von Internet Explorer 11-Tests mithilfe des Selenium-Webtreibers wird der Zugriff auf mehrere Browserfenster über Driver.WindowHandles aufgrund der unvorhersehbaren Reihenfolge der Handles zu einer Herausforderung.

Lösung:

Anstatt sich auf die Reihenfolge der WindowHandles zu verlassen, besteht ein effizienterer Ansatz darin, WebDriverWait zu verwenden, um auf das Öffnen eines neuen Tabs oder Fensters zu warten und dann eine aktualisierte Liste von WindowHandles zu sammeln. Anschließend können Sie diese Handles durchlaufen und mit switchTo().window(newly_opened) auf das gewünschte Fenster zugreifen.

Codebeispiel (Java):

<code class="language-java">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 浏览器标签页处理 {

    public static void main(String[] args) {

        // 初始化 WebDriver 实例
        WebDriver driver = new InternetExplorerDriver();

        // 打开 Google
        driver.get("http://www.google.com");

        // 存储第一个标签页的句柄
        String firstTab = driver.getWindowHandle();

        // 在新标签页中打开 Facebook
        ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");

        // 等待新标签页打开
        WebDriverWait wait = new WebDriverWait(driver, 5);
        wait.until(ExpectedConditions.numberOfWindowsToBe(2));

        // 获取更新的窗口句柄列表
        Set<String> handles = driver.getWindowHandles();

        // 遍历句柄
        Iterator<String> iterator = handles.iterator();
        while (iterator.hasNext()) {
            String currentTab = iterator.next();

            // 检查是否是 Facebook 标签页
            if (!firstTab.equalsIgnoreCase(currentTab)) {
                driver.switchTo().window(currentTab);

                // 确认您在 Facebook 上
                System.out.println("正在操作 Facebook");
            }
        }

        // 存储 Facebook 标签页的句柄
        String secondTab = driver.getWindowHandle();

        // 在新标签页中打开 YouTube
        ((JavascriptExecutor) driver).executeScript("window.open('http://youtube.com/');");

        // 等待 YouTube 标签页打开
        wait.until(ExpectedConditions.numberOfWindowsToBe(3));

        // 再次获取更新的窗口句柄列表
        Set<String> handles2 = driver.getWindowHandles();

        // 再次遍历句柄
        Iterator<String> iterator2 = handles2.iterator();
        while (iterator2.hasNext()) {
            String currentTab = iterator2.next();

            // 检查是否是 YouTube 标签页
            if (!firstTab.equalsIgnoreCase(currentTab) && !secondTab.equalsIgnoreCase(currentTab)) {
                driver.switchTo().window(currentTab);

                // 确认您在 YouTube 上
                System.out.println("正在操作 YouTube");
            }
        }

        // 关闭 WebDriver 实例
        driver.quit();
    }
}</code>

Diese überarbeitete Antwort verbessert die Lesbarkeit und Klarheit durch:

  • Ersetzen der informellen Sprache:Ausdrücke wie „Auf Facebook arbeiten“ werden durch formellere Alternativen ersetzt.
  • Variablennamen verbessern: Aussagekräftigere Variablennamen (z. B. firstTab anstelle von first_tab) verbessern das Codeverständnis.
  • Kommentare hinzufügen: Kommentare werden hinzugefügt, um jeden Schritt im Code ausführlicher zu erläutern.
  • Korrektur kleinerer Syntaxfehler:Kleinere Syntaxprobleme werden korrigiert, um die Codefunktionalität zu verbessern.
  • Beibehaltung des Originalbildes:Das Bild behält sein ursprüngliches Format und seinen ursprünglichen Speicherort.
  • Bewahrung der Kernbedeutung:Die Kernfunktionalität und Erklärung des Codes bleiben unverändert.

Der Code selbst ist funktional gleichwertig, wird jedoch professioneller und leichter verständlich dargestellt.

Das obige ist der detaillierte Inhalt vonWie kann ich mit den WindowHandles von Selenium zuverlässig durch Browser-Registerkarten und Windows iterieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn