当前位置: 首页 > 面试题库 >

Selenium可以验证浏览器加载的PDF中的文本吗?

丁阎宝
2023-03-14
问题内容

我的Web应用程序在浏览器中加载了pdf。我想通了如何使用以下方法检查pdf是否已正确加载:

verifyAttribute xpath = // embed / @ src {PDF的网址在此处}

能够使用Selenium检查pdf的内容真的很好-例如,验证是否存在某些文本。有什么办法吗?


问题答案:

尽管本机不支持,但我发现了使用Java驱动程序的几种方法。一种方法是在浏览器中打开pdf(已安装adobe
acrobat),然后使用键盘快捷键选择所有文本(CTRL + A),然后将其复制到剪贴板(CTRL + C),然后可以验证剪贴板中的文本。例如:

protected String getLastWindow() {
    return session().getEval("var windowId; for(var x in selenium.browserbot.openedWindows ){windowId=x;} ");
}

@Test
public void testTextInPDF() {
    session().click("link=View PDF");
    String popupName = getLastWindow();
    session().waitForPopUp(popupName, PAGE_LOAD_TIMEOUT);
    session().selectWindow(popupName);

    session().windowMaximize();
    session().windowFocus();
    Thread.sleep(3000);

    session().keyDownNative("17"); // Stands for CTRL key
    session().keyPressNative("65"); // Stands for A "ascii code for A"
    session().keyUpNative("17"); //Releases CTRL key
    Thread.sleep(1000);

    session().keyDownNative("17"); // Stands for CTRL key
    session().keyPressNative("67"); // Stands for C "ascii code for C"
    session().keyUpNative("17"); //Releases CTRL key

    TextTransfer textTransfer = new TextTransfer();
    assertTrue(textTransfer.getClipboardContents().contains("Some text in my pdf"));
}

仍然在Java中的另一种方法是下载pdf,然后使用PDFBox将pdf转换为文本,请参见http://www.prasannatech.net/2009/01/convert-
pdf-text-parser-java-api-pdfbox
.html

,以获取有关如何执行此操作的示例。



 类似资料:
  • 然后它说没有预览可用。谁能告诉我这里出了什么问题。

  • 我在Ubuntu Server中设置了一个Selenium Grid,在Ubuntu Desktop中设置了一个Hub,在Ubuntu Desktop中设置了一个Node。Node上的GoogleChrome版本是。我创建会话的python代码是 但是当我传递时,它会出错 硒。常见的例外情况。WebDriverException:消息:转发新会话时出错,找不到:功能{browserName:chr

  • 问题内容: 我正在尝试使用Selenium下载一个验证码图像,但是,下载的图像与浏览器中显示的图像不同。如果我尝试在不更改浏览器的情况下再次下载该图像,则会得到另一种图像。 有什么想法吗? 问题答案: 因为图片的链接会在您打开该链接后为您提供一个随机的 新验证 码图片! 可以从屏幕快照中截取屏幕快照,而不是从图像的上下载文件。但是,您需要下载()并按照此答案中提到的方式使用它: (请注意,我对代码

  • 问题内容: 我的Selenium Webdriver转到页面并等待该页面完成加载。如果30秒过去,它将超时并且脚本失败。 无论如何,是否要让网络驱动程序在30秒后停止页面加载(例如按浏览器中的“ x”)?这样可以防止驱动程序超时。 我正在使用Chromedriver。 问题答案: 这就是我遇到此问题的方式。在chrome支持之前,我将使用这种方式。 我在Chrome中安装了一个名为“停止加载”的扩

  • 我的selenium webdriver转到一个页面,等待该页面完成加载。如果超过30秒,则超时,脚本失败。 是否需要webdriver在30秒后停止页面加载(如按浏览器上的“x”)?这将防止我的司机超时。 我正在使用ChromeDrive。

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