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

时间:2019-12-29 17:10:11

标签: linux selenium selenium-webdriver webdriverwait window-handles

我需要在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系统中完美运行。

1 个答案:

答案 0 :(得分:0)

此错误消息...

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

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

从逻辑上讲,您非常接近。甚至在创建/识别第二个窗口句柄之前,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

中找到相关的详细讨论