org.openqa.selenium.WebDriverException:无效参数:'handle' 必须是字符串,而 window 在 Linux 中使用 Selenium 和 Java 处理

org.openqa.selenium.WebDriverException: invalid argument: 'handle' must be a string while window handling with Selenium and Java in Linux

我需要 运行 管道中的 运行 个测试用例。虚拟机所在的位置 linux。 Selenium 多重 window 处理 - switchTo() 方法为 linux 平台抛出异常。

异常:

org.openqa.selenium.WebDriverException: invalid argument: 'handle' must be a string

代码试验:

driver.switchTo().window(subWindowHandler);

按照多重window句柄方式声明:

String subWindowHandler = null; 
Set<String> handles = driver.getWindowHandles(); 
Iterator<String> iterator = handles.iterator(); 
while (iterator.hasNext()) { 
    subWindowHandler = iterator.next(); 
}

此代码在本地 windows 系统中完美运行。

这个错误信息...

org.openqa.selenium.WebDriverException: invalid argument: 'handle' must be a string

...意味着作为参数传递的 handle 需要是一个字符串。

逻辑上你很接近。可能 driver.getWindowHandles() 执行得太早,甚至在第二个 window 句柄得到 created/recognized.

之前

解决方案

作为解决方案,您需要为 numberOfWindowsToBe(2) 引入 WebDriverWait,您可以使用以下代码块:

String mainWindowHandler = driver.getWindowHandle(); // store mainWindowHandler for future references
//line of code that opens a new TAB / Window
new WebDriverWait(driver, 5).until(ExpectedConditions.numberOfWindowsToBe(2));  //induce WebDriverWait
Set<String> handles = driver.getWindowHandles(); 
Iterator<String> iterator = handles.iterator(); 
while (iterator.hasNext()) 
{ 
    String subWindowHandler = iterator.next(); 
    if (!mainWindowHandler.equalsIgnoreCase(subWindowHandler))
    {
        driver.switchTo().window(subWindowHandler);
    }
}

You can find a relevant detailed discussion in