Meilleur moyen de suivre et de parcourir les onglets et les fenêtres à l'aide de WindowHandles à l'aide de Selenium
P粉744691205
P粉744691205 2023-11-04 18:03:14
0
1
741

Nous travaillons avec Selenium webdriver pour les tests d'interface utilisateur pour Internet Explorer 11. Dans l'application Web de test, plusieurs écrans apparaissent. Dans certains tests, nous nous sommes retrouvés avec trois fenêtres de navigateur et donc trois Driver.WindowHandles. Pour passer d'un WindowHandle à un autre, nous nous attendons à ce que Driver.WindowHandles soit trié avec la fenêtre la plus ancienne en premier et la fenêtre la plus récente en dernier. Mais ce n’est pas le cas : c’est complètement aléatoire !

Parce que windowhandle est un GUID, nous finissons par créer un dictionnaire avec le GUID WindowHandle comme clé et la valeur comme valeur pour le type de page chargé dans la fenêtre du navigateur. Mais cela entraînera également la maintenance du dictionnaire lorsque la fenêtre est fermée.

Cela semble demander beaucoup de travail pour une chose aussi simple. Existe-t-il une meilleure solution ?

P粉744691205
P粉744691205

répondre à tous(1)
P粉986937457

Vous avez tout à fait raison :

Dans une discussion, Simon a clairement mentionné :

Nous augmenterons donc WebDriverWait ,然后每次打开新选项卡/窗口时收集窗口句柄,最后迭代窗口句柄和 switchTo().window(newly_opened) selon les besoins :

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");
    }
}

Sortie console :

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

Autres

Vous pouvez trouver des discussions basées sur sur Ouvrir Web Selenium + Python dans un nouvel onglet p>

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal