我需要在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系统中完美运行。
答案 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
中找到相关的详细讨论