【问题标题】:driver.getWindowHandles() behaviourdriver.getwindowHandles()行为
【发布时间】:2022-01-26 04:47:40
【问题描述】:

当我阅读有关 driver.getWindowHandles() 的内容时,我在某处读到“它将按照打开的顺序返回窗口句柄”。

但是,当我实时使用它时,情况并非如此。

    public void checkAllWebpages() {
    
    ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
    
    for(int tab = 1; tab<=5; tab++) {
        driver.switchTo().window(tabs.get(tab));
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

当我运行上面的代码时,WebDriver 会遍历打开的选项卡,但是它是从最后一个到第一个而不是从第一个到最后一个(从右到左而不是从左到右)。

假设我现在只打开了一个标签,我们称之为“a”。现在我按“b”、“c”、“d”、“e”、“f”的顺序打开 5 个标签。

如果我现在运行上面的代码,WebDriver 将按 'f'、'e'、'd'、'c'、'b'、'a' 的顺序遍历选项卡,而不是 'a', 'b'、'c'、'd'、'e'、'f'。这是为什么呢?

【问题讨论】:

    标签: selenium selenium-webdriver testng


    【解决方案1】:

    “我在某处读过......为什么它实际上以不同于我在某处读到的方式工作” - 这是一个糟糕的问题。

    返回窗口句柄的顺序在specification 中定义,它声明:

    窗口句柄的返回顺序是任意的

    这意味着没有特殊顺序。如何订购句柄取决于特定的 webdriver。

    【讨论】:

    • 好的。你说的有道理。然而,即使 getWindowHandles 返回一个集合,它实际上也返回一个linkedHashSet,它反过来维护插入顺序。所以我的问题是为什么它总是从右到左而不是从左到右迭代?总是这样吗?如果没有,您如何确保您访问的是您需要的确切选项卡?我刚从 Selenium 开始,脑子里有太多问题。对不起!
    • 单一的 getWindowHandle 方法将返回驱动程序的当前窗口句柄。新窗口/选项卡将具有不等于当前的句柄。这就是您跟踪它们的方式,因为每个句柄都是独一无二的。 (遍历 getWindowHandles 数组以查看哪个是新的……)不同的浏览器驱动程序在这里返回不同的顺序……甚至基于本地和远程的不同类型的窗口句柄。 (例如,我认为 Firefox 在新选项卡/窗口为空白时会有不同的句柄,而不是在加载远程 url 后......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多