【问题标题】:Calling getWindowHandles() Again causing timeout再次调用 getWindowHandles() 导致超时
【发布时间】:2020-11-04 20:20:20
【问题描述】:

这是场景:

  1. 点击打开新标签的链接。
  2. 调用 getWindowHandles() 并切换到新选项卡。
  3. 使用 JavaScript 执行器打开打印弹出窗口
  4. 再次调用 getWindowHandles() 将焦点切换到 Print PopUp

第二个 getWindowHandles() 调用导致我的脚本超时,我不知道为什么。有人可以帮我弄清楚第二个电话发生了什么吗?在第 4 步之前,一切都按预期工作

        link.click();
        ArrayList<String> handles2 = new ArrayList<String> (driver.getWindowHandles());
        driver.switchTo().window(handles2.get(1));
        
        ((JavascriptExecutor)driver).executeScript("window.print()");

        ArrayList<String> handles3 = new ArrayList<String> (driver.getWindowHandles());

也许有用的信息:

错误信息:

org.openqa.selenium.ScriptTimeoutException:脚本超时 (会话信息:chrome=86.0.4240.183) 构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:17:03' 系统信息:主机:'',ip:'',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0',java.version:'1.8.0_261' 驱动程序信息:org.openqa.selenium.chrome.ChromeDriver 功能 {acceptInsecureCerts: true, browserName: chrome, browserVersion: 86.0.4240.183, chrome: {chromedriverVersion: 86.0.4240.22 (..., userDataDir: C:\Users\AppData\L...}, goog:chromeOptions: {debuggerAddress :localhost:},javascriptEnabled:true,networkConnectionEnabled:false,pageLoadStrategy:正常,平台:WINDOWS,platformName:WINDOWS,代理:Proxy(),setWindowRect:true,strictFileInteractability:false,超时:{implicit:0,pageLoad:300000,脚本:30000},unhandledPromptBehavior:关闭并通知,webauthn:virtualAuthenticators:true}

【问题讨论】:

  • 根据站点及其打印方式,我不认为打印对话框被视为 Selenium 术语中的窗口句柄。它实际上是一个浏览器对话框。 Selenium 术语中的窗口句柄是浏览器窗口/选项卡。我不知道你window.print() 行是做什么的...它是打开一个新的浏览器窗口(我假设不是)还是启动浏览器打印对话框(我假设是)?
  • 打印对话框打开后可能会阻塞。 (因此,在关闭该窗口之前,浏览器无法执行任何操作。)
  • @JeffC 执行后者,打开浏览器打印对话框。我在网上进行的研究表明,您可以像这样切换到打印对话框。这可能在我拥有的 Chrome 版本中有所改变。
  • @pcalkins 我想在打印对话框上做一些工作,所以我想让那部分保持打开状态。
  • 如果它被阻止,您可能需要为此使用机器人:docs.oracle.com/javase/7/docs/api/java/awt/Robot.html

标签: java selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

问题是打印对话框导致主线程锁定。

您可以按照@pcalkins 的建议使用 Robot 类。但是我使用了 SetTimeout 函数。

参考:ChromeDriver - Timeout when trying to print page with javascript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2020-02-15
    • 2020-03-03
    • 2018-02-13
    相关资源
    最近更新 更多