Может ли Selenium проверять текст внутри PDF, загруженного браузером?
мое веб-приложение загружает pdf-файл в браузере. Я выяснил, как проверить, что pdf загружен правильно, используя:
verifyAttribute xpath= / / embed / @src {URL PDF идет здесь}
было бы очень приятно иметь возможность проверить содержимое pdf с помощью Selenium - например, проверить наличие некоторого текста. Есть ли способ сделать это?
5 ответов
хотя изначально не поддерживается, я нашел несколько способов использования драйвера 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, а затем преобразовать pdf в текст с помощью PDFBox, см. 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 Web Driver и Google Match и Diff project для чтения содержимого pdf в selenium и сравнения.
