首页 > 后端开发 > C++ > 如何使用Selenium的WindowHandles可靠地通过浏览器选项卡和Windows迭代?

如何使用Selenium的WindowHandles可靠地通过浏览器选项卡和Windows迭代?

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可靠地通过浏览器选项卡和Windows迭代?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板