Может ли Selenium проверять текст в PDF, загруженном браузером? - PullRequest
16 голосов
/ 25 августа 2010

Мое веб-приложение загружает PDF в браузер. Я выяснил, как проверить, что PDF-файл загружен правильно, используя:

verifyAttribute = // XPath встраивать / @ SRC {URL PDF идет сюда}

Было бы неплохо иметь возможность проверить содержимое pdf с помощью Selenium - например, проверить, присутствует ли какой-либо текст. Есть какой-либо способ сделать это?

Ответы [ 5 ]

18 голосов
/ 11 ноября 2011

Хотя и не поддерживается изначально, я нашел несколько способов использования драйвера 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 для примера, как это сделать.

1 голос
/ 23 октября 2015
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
1 голос
/ 16 марта 2015

Вы не можете сделать это с помощью WebDriver.Однако API PDFBox можно использовать здесь для чтения содержимого файла PDF.Прежде всего, вам нужно сместить фокус в окно браузера, где открывается файл PDF.Затем вы можете проанализировать все содержимое PDF-файла и выполнить поиск нужной текстовой строки.

Здесь - это код для использования PDFBox API для поиска в документе PDF.

0 голосов
/ 22 января 2014

вы можете использовать Selenium Web Driver и проект Google Match and Diff для чтения содержимого PDF в селене и сравнения.

Прочтите статью здесь.

0 голосов
/ 25 августа 2010

К сожалению, вы не можете сделать это вообще с Selenium

...