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
我需要 运行 管道中的 运行 个测试用例。虚拟机所在的位置 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