2010-08-25 2 views
15

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

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

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

+0

Я думаю, вы говорите о файле PDF, который встроен в страницу через какой-то сторонний плагин, не так ли? –

+0

Хм, да, плагин Adobe PDF для Firefox. Я не слишком привязан к этому, хотя, если есть что-нибудь вообще, я могу проверить об этом pdf, используя Selenium, тогда мне интересно. –

ответ

16

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

0

Вы можете использовать Selenium Web Driver и Google Match и Diff project для чтения pdf-контента в селене и сравнения.

Read the article here.

+0

Для чтения статьи необходима подписка. – jwg

+0

+1 Не знаю, как это могло измениться, но я могу прочитать эту статью без какой-либо подписки. И статья содержит полное описание, как выполнять работу, особенно много кода. Конечно, было бы еще лучше, когда @Selenium Guru еще раз объяснил концепцию этого решения в своем ответе. –

1

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

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

1
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 
+4

Не просто разместите стену кода. Объясните, как это решает проблему. – mzjn

+0

согласен с mzjn .. пожалуйста, уточните его больше –

Смежные вопросы