使用 Selenium 使用 WindowHandles 追蹤和迭代選項卡和視窗的最佳方法
P粉744691205
P粉744691205 2023-11-04 18:03:14
0
1
744

我們正在與 Selenium webdriver 合作,為 Internet Explorer 11 進行 UI 測試。 在測試的 Web 應用程式中,會彈出幾個畫面。在一些測試中,我們最終得到了三個瀏覽器窗口,因此也得到了三個 Driver.WindowHandles。 為了從一個 WindowHandle 切換到另一個,我們期望 Driver.WindowHandles 會按照最舊的視窗在前、最新的視窗在後的方式進行排序。但事實並非如此:它完全是隨機的!

因為 windowhandle 是一個 GUID,所以我們最終建立了一個字典,其中 WindowHandle GUID 作為鍵,其值為瀏覽器視窗中載入的頁面類型的值。 但這也會導致在關閉視窗時維護字典。

對於這麼簡單的事情來說,似乎需要做很多工作。有沒有更好的解決方案?

P粉744691205
P粉744691205

全部回覆(1)
P粉986937457

你說得非常正確:

在一次討論中,Simon 明確提到:

因此,我們將引發WebDriverWait ,然後每次開啟新分頁/視窗時收集視窗句柄,最後迭代視窗句柄和 switchTo().window( newly_opened) 根據需要:

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

控制台輸出:

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

其他

您可以在下列位置找到基於 的討論在新分頁中開啟 Web Selenium Python p>#

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板