2010-08-25 41 views
15

Ứng dụng web của tôi tải một bản pdf trong trình duyệt. Tôi đã tìm ra cách để kiểm tra xem pdf đã được nạp đúng cách sử dụng:Có thể Selenium xác minh văn bản bên trong một tệp PDF được trình duyệt tải không?

verifyAttribute xpath = // nhúng/@ src {URL của PDF goes here}

Nó sẽ thực sự thoải mái để có thể kiểm tra nội dung của pdf bằng Selenium - ví dụ xác minh rằng một số văn bản có mặt. Có cách nào để làm điều này không?

+0

Tôi đoán bạn đang nói về tệp PDF được kết xuất được nhúng trong một trang thông qua một số loại plugin của bên thứ ba, phải không? –

+0

Hmm yeah plugin Adobe PDF cho firefox tôi đoán. Tôi không quá gắn bó với điều đó mặc dù - nếu có bất cứ điều gì ở tất cả tôi có thể kiểm tra về pdf này bằng cách sử dụng Selenium sau đó tôi quan tâm. –

Trả lời

16

Trong khi không phải nguyên bản được hỗ trợ, tôi đã tìm thấy một vài cách sử dụng trình điều khiển java. Một cách là mở pdf trong trình duyệt của bạn (cài đặt adobe acrobat) và sau đó sử dụng phím tắt để chọn tất cả văn bản (CTRL + A), sau đó sao chép nó vào clipboard (CTRL + C) và sau đó bạn có thể xác minh văn bản trong khay nhớ tạm. ví dụ:

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

Một cách khác, vẫn còn trong java, là để tải về pdf và sau đó chuyển đổi pdf sang văn bản với PDFBox, xem http://www.prasannatech.net/2009/01/convert-pdf-text-parser-java-api-pdfbox.html cho một ví dụ về cách để làm điều này.

0

Đáng tiếc là bạn không thể làm được điều này ở tất cả với Selenium

0

bạn có thể sử dụng Trình điều khiển web Selenium và dự án Google Match và Diff để đọc nội dung pdf trong selen và so sánh.

Read the article here.

+0

Đăng ký là cần thiết để đọc bài viết. – jwg

+0

+1 Không biết điều này có thể đã thay đổi như thế nào nhưng tôi có thể đọc bài viết này mà không cần đăng ký. Và bài viết có mô tả đầy đủ về cách thực hiện công việc, đặc biệt là rất nhiều mã. Tất nhiên nó sẽ còn tốt hơn nữa khi @Selenium Guru đã phác họa khái niệm giải pháp này trong câu trả lời của anh ấy thêm một chút nữa. –

1

Bạn không thể làm điều này bằng WebDriver natively. Tuy nhiên, PDFBox API có thể được sử dụng ở đây để đọc nội dung của tệp PDF. Trước tiên, bạn sẽ phải chuyển trọng tâm sang cửa sổ trình duyệt nơi tệp PDF được mở. Sau đó, bạn có thể phân tích tất cả nội dung của tệp PDF và tìm kiếm chuỗi văn bản mong muốn.

Here là mã để sử dụng API PDFBox để tìm kiếm trong tài liệu 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

Không chỉ đăng một bức tường mã. Giải thích cách giải quyết vấn đề. – mzjn

+0

đồng ý với mzjn .. vui lòng giải thích thêm –

Các vấn đề liên quan