Maison  >  Questions et réponses  >  le corps du texte

Meilleur moyen de suivre et de parcourir les onglets et les fenêtres à l'aide de WindowHandles à l'aide de Selenium

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粉744691205P粉744691205319 Il y a quelques jours650

répondre à tous(1)je répondrai

  • P粉986937457

    P粉9869374572023-11-05 16:56:30

    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

    répondre
    0
  • Annulerrépondre