【发布时间】:2020-11-04 20:20:20
【问题描述】:
这是场景:
- 点击打开新标签的链接。
- 调用 getWindowHandles() 并切换到新选项卡。
- 使用 JavaScript 执行器打开打印弹出窗口
- 再次调用 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