org.openqa.selenium.WebDriverException:无效参数:在Linux中使用Selenium和Java进行窗口处理时,“ handle”必须为字符串

问题描述 投票:0回答:1

我需要在CI管道中运行测试用例。 VM是linux的地方。 Selenium多窗口处理-switchTo()方法在Linux平台上引发异常。

例外:

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

代码试用:

driver.switchTo().window(subWindowHandler);

它按照多个窗口句柄的方式声明:

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

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

linux selenium selenium-webdriver webdriverwait window-handles
1个回答
0
投票

此错误消息...

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

...表示作为参数传递的handle必须是字符串。

从逻辑上讲,您非常接近。甚至在创建/识别第二个窗口句柄之前,driver.getWindowHandles()可能执行得还为时过早。


解决方案

作为解决方案,您需要为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);
    }
}

您可以在Best way to keep track and iterate through tabs and windows using WindowHandles using Selenium中找到相关的详细讨论

© www.soinside.com 2019 - 2024. All rights reserved.