Maison > développement back-end > C++ > Comment puis-je parcourir de manière fiable les onglets du navigateur et les fenêtres à l'aide de Windowles de Selenium?

Comment puis-je parcourir de manière fiable les onglets du navigateur et les fenêtres à l'aide de Windowles de Selenium?

Mary-Kate Olsen
Libérer: 2025-01-27 02:51:07
original
716 Les gens l'ont consulté

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

La meilleure façon d'utiliser les mains de fenêtres de Selenium pour caractériser les onglets et les fenêtres

Question:

Lorsque vous utilisez des tests Selenium WebDriver Internet Explorer 11, car le type de poignée est imprévisible, accédant à plusieurs fenêtres de navigateur via le pilote. WindowHandles devient difficile.

Solution:

Au lieu de compter sur le tri de Handshandles, un moyen plus efficace consiste à utiliser WebDriverWait pour attendre que le nouvel onglet ou la nouvelle fenêtre s'ouvre, puis de collecter la liste des WindowsHandles mis à jour. Ensuite, vous pouvez traverser ces poignées et utiliser Switchtto ().

Exemple de code (java):

Cette réponse révisée améliore la lisibilité et la clarté de:

<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>
Copier après la connexion
Langage informel a répondu:

Les phrases comme "travailler sur Facebook" sont remplacées par des alternatives plus formelles.

Amélioration des noms de variables:

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal