我的 Web 应用程序在浏览器中加载了一个 pdf。我已经弄清楚如何使用以下方法检查 pdf 是否已正确加载:
verifyAttribute xpath=//embed/@src {PDF 的 URL 在这里}
能够使用 Selenium 检查 pdf 的内容真是太好了 - 例如验证是否存在某些文本。有没有办法做到这一点?
我的 Web 应用程序在浏览器中加载了一个 pdf。我已经弄清楚如何使用以下方法检查 pdf 是否已正确加载:
verifyAttribute xpath=//embed/@src {PDF 的 URL 在这里}
能够使用 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以获取有关如何执行此操作的示例。
您不能本机使用 WebDriver 来执行此操作。但是,这里可以使用 PDFBox API 来读取 PDF 文件的内容。您必须首先将焦点转移到打开 PDF 文件的浏览器窗口。然后,您可以解析 PDF 文件的所有内容并搜索所需的文本字符串。
这是使用 PDFBox API 在 PDF 文档中搜索的代码。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import org.pdfbox.cos.COSDocument;
import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.util.PDFTextStripper;
public class pdfToTextConverter {
public static void pdfToText(String path_to_PDF_file, String Path_to_output_text_file) throws FileNotFoundException, IOException{
//Parse text from a PDF into a string variable
File f = new File("path_to_PDF_file");
PDFParser parser = new PDFParser(new FileInputStream(f));
parser.parse();
COSDocument cosDoc = parser.getDocument();
PDDocument pdDoc = new PDDocument(cosDoc);
PDFTextStripper pdfStripper = new PDFTextStripper();
String parsedText = pdfStripper.getText(pdDoc);
System.out.println(parsedText);
//Write parsed text into a file
PrintWriter pw = new PrintWriter("Path_to_output_text_file");
pw.print(parsedText);
pw.close();
}
}
JAR Source
http://sourceforge.net/projects/pdfbox/files/latest/download?source=files
不幸的是,你不能用 Selenium 做到这一点
有一种方法。
这不是最好的,但总比没有好。