当前位置: 首页 > 知识库问答 >
问题:

无法使用Selenium访问Chrome的PDF预览窗口中的元素

庄浩言
2023-03-14

我的应用程序中有一个打印按钮。此打印按钮在新窗口中打开一个PDF。此窗口顶部是打印图标,可以单击该图标打开Chrome的打印预览窗口,在该窗口中可以选择“另存为PDF”选项来保存PDF文件。

我想在selenium中测试此流。

---我单击网页上的打印按钮。这将打开一个带有PDF的新Chrome窗口

driver.findElement(By.cssSelector("ID")).click();

---我切换到新打开的Chrome窗口

driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());

我可以在日志中看到硒确实正在切换到新窗口。

我尝试打开新Chrome窗口的元素

driver.findElement(By.cssSelector("viewer-pdf-toolbar"))

这就是问题所在。Selenium无法与此新打开的窗口交互,无法找到此元素。当我检查新打开的窗口时,我看到以下DOM结构-

<body> 
    <viewer-pdf-toolbar id="toolbar"></viewer-pdf-toolbar>
    <div id="sizer" style="width: 735px; height: 1092px;"></div>
    <viewer-password-screen id="password-screen"></viewer-password-screen>
    ...
    ..
    .
</div>

我正在寻找的元素确实存在于DOM结构中,我可以通过控制台访问它,但我无法使用Selenium访问它。您可以通过在Chrome浏览器中打开任何PDF文件并检查窗口来查看此DOM。你知道为什么会这样吗?

注意:加载新窗口时,会显示一两秒钟“正在打印,请稍候”,然后加载PDF。不确定此信息是否与此处的问题相关。

其他信息-

在调试模式下,在驱动程序切换到新的PDF窗口后,我评估了驱动程序。getCurrentUrl()-此URL是预览窗口地址栏中显示的正确URL。这意味着我的驱动程序位于正确的车窗上。

但当我执行驱动程序时。getPageSource-我得到以下输出

<html>
<head>
</head>
<body style="height: 100%; width: 100%; overflow: hidden; margin:0px; background-color: rgb(82, 86, 89);">
<embed name="XXXXXXD474B71424EC89403FB4FA75CF" style="position:absolute; left: 0; top: 0;" width="100%" height="100%" src="about:blank" type="application/pdf" internalid="XXXXXXD474B71424EC89403FB4FA75CF"></body>
</html>

因此,驱动程序将此视为页面源,而当我在同一窗口上执行检查时,我会看到不同的DOM。为什么会这样?Chrome是否正在替换<代码>

请帮帮忙!

共有1个答案

廉实
2023-03-14

诱发WebDriverWatch()并等待visibilityOfElementInduce()并跟随css选择器。

new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#toolbar")));

更新:

new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.tagName("body")));
 类似资料:
  • 当点击登录按钮时,弹出窗口显示使用google登录。我需要使用弹出窗口的google按钮访问登录。我已经展示了一些使用方法和方法处理弹出窗口的先前示例。但是无法访问弹出窗口中的元素。 下面的代码显示了无接触异常

  • 语言-JAVA IDE-Eclipse工具-Selenium Web驱动程序

  • 我想为我的浏览器扩展写一个验收测试。我尝试通过selenium启动扩展,但似乎无法访问Popup的内容。有人能建议我如何用selenium或任何其他方法来为浏览器扩展编写UI/验收测试吗?多谢了。

  • 我想像一个一个地改变页面,但无法访问元素。http://prntscr.com/o0f4mx我试了所有的办法,但都没用。拜托,我需要帮助。 代码: 下面是我得到的错误:

  • 问题内容: 我正在尝试在Ubuntu 16.10 Server上运行Selenium,但是却遇到了WebDriverException:消息:无法访问chrome(驱动程序信息:chromedriver 2.9.248304,平台= Linux 4.8.0-22-通用x86_64) Chrome已安装: 谷歌浏览器57.0.2987.110 问题答案: 添加一些镀铬选项有帮助!

  • 我的用例:我必须从pdf中读取数据,而不是在chrome浏览器中打开,并检查pdf中是否存在一些特定的数据。 由于我无法做到以上,我想到下载文件在我的电脑上,并使用PDFbox进行验证。我创建了一个chrome配置文件,带有直接下载pdf文件的设置(设置>内容设置>pdf文档)。我已经在我的selenium脚本中将其设置为chrome选项。测试工作,但当pdf打开时,它不会开始下载。PDF文件在我