Cara terbaik untuk menjejak dan mengulangi tab dan tetingkap menggunakan WindowHandles menggunakan Selenium
P粉744691205
P粉744691205 2023-11-04 18:03:14
0
1
743

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粉744691205
P粉744691205

membalas semua(1)
P粉986937457

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 p>

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan