cari

Rumah  >  Soal Jawab  >  teks badan

Cara terbaik untuk menjejak dan mengulangi tab dan tetingkap menggunakan WindowHandles menggunakan Selenium

Kami sedang bekerjasama dengan pemacu web Selenium untuk ujian UI untuk Internet Explorer 11. Dalam aplikasi web ujian, beberapa skrin muncul. Dalam beberapa ujian, kami mendapat tiga tetingkap penyemak imbas dan oleh itu tiga Driver.WindowHandles. Untuk bertukar daripada satu WindowHandle ke yang lain, kami menjangkakan Driver.WindowHandle akan diisih dengan tetingkap tertua dahulu dan tetingkap terbaharu terakhir. Tetapi itu tidak berlaku: ia benar-benar rawak!

Oleh kerana windowhandle ialah GUID, kami akhirnya mencipta kamus dengan WindowHandle GUID sebagai kunci dan nilai sebagai nilai untuk jenis halaman yang dimuatkan dalam tetingkap penyemak imbas. Tetapi ini juga akan menyebabkan kamus dikekalkan apabila tetingkap ditutup.

Nampaknya banyak kerja untuk perkara yang begitu mudah. Adakah terdapat penyelesaian yang lebih baik?

P粉744691205P粉744691205419 hari yang lalu750

membalas semua(1)saya akan balas

  • P粉986937457

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

    Anda betul sekali:

    Dalam perbincangan, Simon dengan jelas menyebut:

    Jadi kami akan naikkan WebDriverWait ,然后每次打开新选项卡/窗口时收集窗口句柄,最后迭代窗口句柄和 switchTo().window(newly_opened) mengikut keperluan:

    Jawa:

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

    Keluaran konsol:

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

    Lain-lain

    Anda boleh mencari perbincangan berasaskan di Buka Web Selenium + Python dalam tab baharu

    balas
    0
  • Batalbalas