使用 Selenium 使用 WindowHandles 跟踪和迭代选项卡和窗口的最佳方法
P粉744691205
P粉744691205 2023-11-04 18:03:14
0
1
746

我们正在与 Selenium webdriver 合作,为 Internet Explorer 11 进行 UI 测试。 在测试的 Web 应用程序中,会弹出几个屏幕。在一些测试中,我们最终得到了三个浏览器窗口,因此也得到了三个 Driver.WindowHandles。 为了从一个 WindowHandle 切换到另一个,我们期望 Driver.WindowHandles 会按照最旧的窗口在前、最新的窗口在后的方式进行排序。但事实并非如此:它完全是随机的!

因为 windowhandle 是一个 GUID,所以我们最终创建了一个字典,其中 WindowHandle GUID 作为键,其值为浏览器窗口中加载的页面类型的值。 但这也会导致在关闭窗口时维护字典。

对于这么简单的事情来说,似乎需要做很多工作。有没有更好的解决方案?

P粉744691205
P粉744691205

全部回复(1)
P粉986937457

你说得非常正确:

在一次讨论中,Simon 明确提到:

因此,我们将引发 WebDriverWait ,然后每次打开新选项卡/窗口时收集窗口句柄,最后迭代窗口句柄和 switchTo().window(newly_opened) 根据需要:

Java:

package demo;

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 NEW_TAB_Handling {

    public static void main(String[] args)  {


        System.setProperty("webdriver.ie.driver", "C:\Utility\BrowserDrivers\IEDriverServer.exe");
        WebDriver driver =  new InternetExplorerDriver();
        driver.get("http://www.google.com");
        String first_tab = driver.getWindowHandle();
        System.out.println("Working on Google");
        ((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();
        while(i1.hasNext())
        {
            String next_tab = i1.next();
            if (!first_tab.equalsIgnoreCase(next_tab))
            {
                driver.switchTo().window(next_tab);

                System.out.println("Working on Facebook");
            }
        }
        String second_tab = driver.getWindowHandle();
        ((JavascriptExecutor) driver).executeScript("window.open('http://youtube.com/');");
        wait.until(ExpectedConditions.numberOfWindowsToBe(3));
        Set<String> s2 = driver.getWindowHandles();
        Iterator<String> i2 = s2.iterator();
        while(i2.hasNext())
        {
            String next_tab = i2.next();
            if (!first_tab.equalsIgnoreCase(next_tab) && !second_tab.equalsIgnoreCase(next_tab))
            {
                driver.switchTo().window(next_tab);
                System.out.println("Working on Youtube");
            }
        }
        driver.quit();
        System.out.println("Quit the WebDriver instance");
    }
}

控制台输出:

Working on Google
Working on Facebook
Working on Youtube
Quit the WebDriver instance

其他

您可以在以下位置找到基于 的讨论在新选项卡中打开 Web Selenium + Python p>

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板