在尝试切换到它之前等待窗口打开

Posted

技术标签:

【中文标题】在尝试切换到它之前等待窗口打开【英文标题】:Wait for window to open before attempting to switch to it 【发布时间】:2020-12-18 17:31:01 【问题描述】:

我的测试出现问题,我选择了一个按钮,然后切换到在我选择按钮后打开的windwo,问题是我一直没有收到帧异常和超出范围异常。

我的代码是:

        clickWithActions(driver, launchNote);
        sleepForTime(6000);
        Set<String> handles = driver.getWindowHandles();

        List list = Arrays.asList(handles.toArray());
        driver.switchTo().window(list.get(1).toString());
        sleepForTime(6000);
        driver.manage().window().maximize();
        driver.manage().window().setSize(new Dimension(1920, 1080));

        break;

有什么方法可以让我等待这个窗口首先出现而无需长时间等待?

【问题讨论】:

【参考方案1】:

这个numberOfWindowsToBe() 预期的等待条件听起来很合适:

clickWithActions(driver, launchNote);

// wait for the number of windows to increase
new WebDriverWait(driver, 15).until(ExpectedConditions.numberOfWindowsToBe(2));

【讨论】:

【参考方案2】:

在执行clickWithActions() 之前,您需要收集初始的WindowHandle,一旦您执行点击,您需要为numberOfWindowsToBe(2) 诱导WebDriverWait。所以你的有效代码块将是:

String first_handle = driver.getWindowHandle();
clickWithActions(driver, launchNote);
new WebDriverWait(driver,10).until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> allHandles = driver.getWindowHandles();
for(String winHandle:allHandles)

    if (!first_handle.equalsIgnoreCase(winHandle)
    
    driver.switchTo().window(winHandle);
    


参考文献

您可以在以下位置找到一些相关的详细讨论:

Selenium switch focus to tab, which opened after clicking link Best way to keep track and iterate through tabs and windows using WindowHandles using Selenium

【讨论】:

以上是关于在尝试切换到它之前等待窗口打开的主要内容,如果未能解决你的问题,请参考以下文章

切换到同一窗口中的弹出窗口

win7系统下如何快速切换程序窗口的方法

Python3-Selenium自动化测试框架之窗口切换等待

等待图像在 JavaScript 中加载

如何使用 PyQt 在窗口中切换布局? (不关闭/打开窗口)

webdriver中的三大等待及窗口的切换