首頁 > 後端開發 > C++ > 如何使用 Selenium 的 WindowHandles 可靠地迭代瀏覽器標籤和視窗?

如何使用 Selenium 的 WindowHandles 可靠地迭代瀏覽器標籤和視窗?

Mary-Kate Olsen
發布: 2025-01-27 02:51:07
原創
716 人瀏覽過

How Can I Reliably Iterate Through Browser Tabs and Windows Using Selenium's WindowHandles?

使用 Selenium 的 WindowHandles 迭代遍歷選項卡和窗口的最佳方法

問題:

在使用 Selenium webdriver 自動化 Internet Explorer 11 測試時,由於句柄的排序不可預測,通過 Driver.WindowHandles 訪問多個瀏覽器窗口變得具有挑戰性。

解決方案:

與其依賴 WindowHandles 的排序,更有效的方法是使用 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.firefox.FirefoxDriver;
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 实例
        WebDriver driver = new InternetExplorerDriver();

        // 打开 Google
        driver.get("http://www.google.com");

        // 存储第一个标签页的句柄
        String firstTab = driver.getWindowHandle();

        // 在新标签页中打开 Facebook
        ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");

        // 等待新标签页打开
        WebDriverWait wait = new WebDriverWait(driver, 5);
        wait.until(ExpectedConditions.numberOfWindowsToBe(2));

        // 获取更新的窗口句柄列表
        Set<String> handles = driver.getWindowHandles();

        // 遍历句柄
        Iterator<String> iterator = handles.iterator();
        while (iterator.hasNext()) {
            String currentTab = iterator.next();

            // 检查是否是 Facebook 标签页
            if (!firstTab.equalsIgnoreCase(currentTab)) {
                driver.switchTo().window(currentTab);

                // 确认您在 Facebook 上
                System.out.println("正在操作 Facebook");
            }
        }

        // 存储 Facebook 标签页的句柄
        String secondTab = driver.getWindowHandle();

        // 在新标签页中打开 YouTube
        ((JavascriptExecutor) driver).executeScript("window.open('http://youtube.com/');");

        // 等待 YouTube 标签页打开
        wait.until(ExpectedConditions.numberOfWindowsToBe(3));

        // 再次获取更新的窗口句柄列表
        Set<String> handles2 = driver.getWindowHandles();

        // 再次遍历句柄
        Iterator<String> iterator2 = handles2.iterator();
        while (iterator2.hasNext()) {
            String currentTab = iterator2.next();

            // 检查是否是 YouTube 标签页
            if (!firstTab.equalsIgnoreCase(currentTab) && !secondTab.equalsIgnoreCase(currentTab)) {
                driver.switchTo().window(currentTab);

                // 确认您在 YouTube 上
                System.out.println("正在操作 YouTube");
            }
        }

        // 关闭 WebDriver 实例
        driver.quit();
    }
}</code>
登入後複製

This revised response improves readability and clarity by:

  • Replacing informal language: Phrases like "Working on Facebook" are replaced with more formal alternatives.
  • Improving variable names: More descriptive variable names (e.g., firstTab instead of first_tab) enhance code understanding.
  • Adding comments: Comments are added to explain each step in the code more thoroughly.
  • Correcting minor syntax: Minor syntax issues are corrected for better code functionality.
  • Maintaining the original image: The image remains in its original format and location.
  • Preserving the core meaning: The core functionality and explanation of the code remain unchanged.

The code itself is functionally equivalent but is presented in a more professional and easily understandable manner.

以上是如何使用 Selenium 的 WindowHandles 可靠地迭代瀏覽器標籤和視窗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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