2010-08-25 8 views
15

Moja aplikacja internetowa ładuje plik PDF w przeglądarce. I zorientowali się, jak sprawdzić, że PDF został prawidłowo załadowany, używając:Czy Selenium może weryfikować tekst w pliku PDF załadowanym przez przeglądarkę?

verifyAttribute XPath = // embed/@ src {URL PDF idzie tu}

Byłoby naprawdę miło być w stanie sprawdź zawartość pliku pdf z Selenium - na przykład sprawdź, czy jakiś tekst jest obecny. Czy jest jakiś sposób to zrobić?

+0

Domyślam się, że mówisz o pliku PDF, który został osadzony na stronie za pomocą wtyczki innej firmy, prawda? –

+0

Hmm tak, wtyczka Adobe PDF dla Firefoxa, jak sądzę. Nie jestem do tego zbyt przywiązany - jeśli cokolwiek mogę przetestować na temat tego pliku PDF za pomocą Selenium, to jestem zainteresowany. –

Odpowiedz

16

Chociaż nie natywnie obsługiwany, znalazłem kilka sposobów, za pomocą sterownika Java. Jednym ze sposobów jest otwarcie pdf w przeglądarce (po zainstalowaniu programu Adobe Acrobat), a następnie użycie klawiszy skrótów klawiaturowych w celu zaznaczenia całego tekstu (CTRL + A), a następnie skopiowanie go do schowka (CTRL + C), a następnie zweryfikowanie tekst w schowku. np:

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")); 
} 

Innym sposobem, nadal w java, jest, aby pobrać plik PDF, a następnie przekonwertować PDF do tekstu z PDFBox, patrz http://www.prasannatech.net/2009/01/convert-pdf-text-parser-java-api-pdfbox.html na przykład o tym, jak to zrobić.

0

Możesz użyć Selenium Web Driver oraz Google Match and Diff, aby odczytać zawartość pdf w selen i porównać.

Read the article here.

+0

Wymagana jest subskrypcja, aby przeczytać artykuł. – jwg

+0

+1 Nie wiem, jak to się mogło zmienić, ale jestem w stanie przeczytać ten artykuł bez subskrypcji. Artykuł zawiera pełny opis tego, jak wykonać tę pracę, zwłaszcza dużą ilość kodu. Oczywiście byłoby jeszcze lepiej, gdy @elementum Guru wypracował koncepcję tego rozwiązania w swojej odpowiedzi trochę więcej. –

1

nie można zrobić przy użyciu WebDriver natywnie. Jednak można użyć PDFBox API, aby odczytać zawartość pliku PDF. Najpierw musisz przesunąć fokus na okno przeglądarki, w którym otwierany jest plik PDF. Następnie możesz przeanalizować całą zawartość pliku PDF i wyszukać żądany ciąg tekstowy.

Here to kod do użycia funkcji API PDFBox do wyszukiwania w dokumencie 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

Nie publikuj tylko ściany kodu. Wyjaśnij, jak rozwiązuje problem. – mzjn

+0

Zgadzam się z mzjn .. proszę rozwinąć to więcej –

Powiązane problemy