【问题标题】:org.openqa.selenium.WebDriverException: invalid argument: 'handle' must be a string while window handling with Selenium and Java in Linuxorg.openqa.selenium.WebDriverException:无效参数:在 Linux 中使用 Selenium 和 Java 处理窗口时,“句柄”必须是字符串
【发布时间】:2020-04-18 15:38:38
【问题描述】:

我需要在 CI 管道中运行测试用例。虚拟机是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系统中完美运行。

【问题讨论】:

  • subWindowHandler 是如何声明/定义的?
  • 按多窗口句柄方式声明- String subWindowHandler = null; Set 句柄 = driver.getWindowHandles();迭代器 迭代器 = 句柄.iterator(); while (iterator.hasNext()) { subWindowHandler = iterator.next(); } 此代码在本地 windows 系统中完美运行
  • 多个 ?你的意思是windowHandles列表
  • @DebanjanB .. 请检查上面编辑的评论以回答您的问题
  • Chrome / ChromeDriver 版本好吗?

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


【解决方案1】:

此错误消息...

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找到相关的详细讨论

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多