Maison > développement back-end > C++ > Comment suivre et parcourir efficacement les handles de fenêtre Selenium dans un ordre imprévisible ?

Comment suivre et parcourir efficacement les handles de fenêtre Selenium dans un ordre imprévisible ?

DDD
Libérer: 2025-01-27 02:56:10
original
647 Les gens l'ont consulté

How to Efficiently Track and Iterate Through Selenium WindowHandles in Unpredictable Order?

Bonnes pratiques pour une gestion efficace des fenêtres et onglets Selenium

Présentation

La gestion de plusieurs onglets et fenêtres peut être délicate lors de l'utilisation de Selenium WebDriver pour les tests d'interface utilisateur avec Internet Explorer 11. Afin de les suivre efficacement, il est crucial d’utiliser l’attribut WindowHandles. Cependant, un problème courant se produit lorsque l’ordre attendu des handles de fenêtre est instable. Cet article explique comment résoudre ce problème et explorer des solutions plus efficaces.

Caractère aléatoire de l'ordre des poignées de fenêtre

Contrairement aux attentes, l'ordre de WindowHandles n'est pas stable. L'implémentation de WebDriver les parcourt de manière arbitraire sans aucune garantie d'ordre d'insertion. Cela peut rendre difficile la gestion efficace de plusieurs fenêtres et le basculement entre elles.

Utiliser le dictionnaire pour la gestion

Une solution consiste à créer un dictionnaire en utilisant le WindowHandle GUID comme clé et le type de page correspondant comme valeur. Cette approche garantit une commutation correcte entre les fenêtres. Cependant, cela nécessite un entretien supplémentaire, notamment lorsque la fenêtre est fermée.

Présentation de WebDriverWait

Une meilleure façon est d'utiliser WebDriverWait. Cela vous permet de faire une pause avant de collecter WindowHandles. En les collectant à chaque fois que vous ouvrez un nouvel onglet/fenêtre, vous pouvez créer une liste ordonnée et passer à la fenêtre souhaitée en utilisant switchTo().window(newly_opened).

Exemple de mise en œuvre

Ce qui suit est un exemple d'implémentation en 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.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 driver = new InternetExplorerDriver();
        driver.get("http://www.google.com");
        String first_tab = driver.getWindowHandle();

        ((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();
        String next_tab;
        while (i1.hasNext()) {
            next_tab = i1.next();
            if (!first_tab.equalsIgnoreCase(next_tab)) {
                driver.switchTo().window(next_tab);
            }
        }
    }
}</code>
Copier après la connexion

Ce code ouvre automatiquement plusieurs onglets, attend qu'ils se chargent, puis passe à la fenêtre correspondante à l'aide d'une liste WindowHandles ordonnée.

Conclusion

Bien que l'utilisation de dictionnaires pour la gestion des fenêtres soit possible, l'introduction de WebDriverWait et de collections lors de la création de nouveaux onglets WindowHandles fournit un moyen plus efficace et plus efficient de suivre et de parcourir plusieurs onglets et fenêtres dans la solution flexible.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal