首頁 > 後端開發 > C++ > 如何以不可預測的順序有效地追蹤和迭代 Selenium WindowHandles?

如何以不可預測的順序有效地追蹤和迭代 Selenium WindowHandles?

DDD
發布: 2025-01-27 02:56:10
原創
647 人瀏覽過

How to Efficiently Track and Iterate Through Selenium WindowHandles in Unpredictable Order?

Selenium窗口和標籤高效管理的最佳實踐

引言

使用Selenium WebDriver進行Internet Explorer 11的UI測試時,管理多個標籤和窗口可能很棘手。為了有效地跟踪它們,使用WindowHandles屬性至關重要。然而,當窗口句柄的預期順序不穩定時,就會出現常見問題。本文將介紹如何解決此問題並探索更有效的解決方案。

窗口句柄順序的隨機性

與預期相反,WindowHandles的順序並不穩定。 WebDriver實現以任意方式迭代它們,沒有任何插入順序的保證。這可能導致難以有效管理多個窗口並在它們之間切換。

使用字典進行管理

一種解決方案是創建一個字典,使用WindowHandle GUID作為鍵,相應的頁麵類型作為值。這種方法確保了在窗口之間正確切換。但是,它需要額外的維護,尤其是在關閉窗口時。

引入WebDriverWait

更好的方法是使用WebDriverWait。這允許您在收集WindowHandles之前暫停。通過在每次打開新標籤/窗口時收集它們,您可以創建一個有序列表,並使用switchTo().window(newly_opened)切換到所需的窗口。

示例實現

以下是Java中的示例實現:

<code class="language-java">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.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class 新标签页处理 {

    public static void main(String[] args) {

        WebDriver driver = new InternetExplorerDriver();
        driver.get("http://www.google.com");
        String first_tab = driver.getWindowHandle();

        ((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();
        String next_tab;
        while (i1.hasNext()) {
            next_tab = i1.next();
            if (!first_tab.equalsIgnoreCase(next_tab)) {
                driver.switchTo().window(next_tab);
            }
        }
    }
}</code>
登入後複製

此代碼自動打開多個標籤頁,等待它們加載,然後使用有序的WindowHandles列表切換到相應的窗口。

結論

雖然使用字典進行窗口管理是可行的,但在創建新標籤頁時引入WebDriverWait和收集WindowHandles為在Selenium中跟踪和迭代多個標籤頁和窗口提供了一種更高效、更靈活的解決方案。

以上是如何以不可預測的順序有效地追蹤和迭代 Selenium WindowHandles?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板