首页 > 后端开发 > C++ > 如何以不可预测的顺序有效地跟踪和迭代 Selenium WindowHandles?

如何以不可预测的顺序有效地跟踪和迭代 Selenium WindowHandles?

DDD
发布: 2025-01-27 02:56:10
原创
713 人浏览过

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中的示例实现:

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);
            }
        }
    }
}
登录后复制

此代码自动打开多个标签页,等待它们加载,然后使用有序的WindowHandles列表切换到相应的窗口。

结论

虽然使用字典进行窗口管理是可行的,但在创建新标签页时引入WebDriverWait和收集WindowHandles为在Selenium中跟踪和迭代多个标签页和窗口提供了一种更高效、更灵活的解决方案。

以上是如何以不可预测的顺序有效地跟踪和迭代 Selenium WindowHandles?的详细内容。更多信息请关注PHP中文网其他相关文章!

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