6.8. PDF-Dokumente zum Download auf Webseiten

Ausgangssituation

Sie bieten auf Ihrer Webseite benutzerspezifisch generierte PDF-Dokumente an.

Problem

Das PDF kann nur im Kontext seiner Webseite getestet werden, weil die Anwendung nunmal so konzipiert ist. Also müssen die Eingaben für den Test über die Webanwendung durchgeführt werden und am Ende des Geschäftsvorgang das generierte PDF über den Browser geladen werden.

Lösungsansatz

Selenium bietet gute Möglichkeiten, ein PDF-Dokument innerhalb einer Webseite zu selektieren. Dieses wird als Stream an PDFUnit übergeben.

Lösung

Der eigentliche Test besteht aus den folgenden Zeilen:

/**
 * When the URL of the pdf document inside an HTML page is generated dynamically,
 * you have to find the link (href) first.
 * Input data for the web page can also be typed with Selenium (not shown here).
 */
@Test
public void verifyPDF_LoadedBySeleniumWebdriver() throws Exception {
  // arrange, navigate to web site:
  String startURL = "http://www.unicode.org/charts/";
  driver.get(startURL);
  WebElement element = driver.findElement(By.linkText("Basic Latin (ASCII)"));
  String hrefValue = element.getAttribute("href");
  
  // act, load PDF web site:
  URL url = new URL(hrefValue);
  
  // assert, validate PDF:
  String expectedTitle  = "The Unicode Standard, Version 6.3";

  AssertThat.document(url)
            .hasTitle().equalsTo(expectedTitle)
  ;
  AssertThat.document(url)
            .restrictedTo(FIRST_PAGE)
            .hasText()
            .containing("0000", "007F")
  ;
}

Die restlichen Zeilen zur Vervollständigung des Beispiel sind:

/**
 * This sample shows how to test a PDF document with Selenium and PDFUnit.
 * See the previous code listing for the '@Test' method. 
 *
 * @author Carsten Siedentop, March 2012
 */
public class PDFFromWebsiteTest {

  private WebDriver driver;

  @Before
  public void createDriver() throws Exception {
    driver = new HtmlUnitDriver();
    Logger htmlunitLogger = Logger.getLogger("com.gargoylesoftware.htmlunit");
    htmlunitLogger.setLevel(java.util.logging.Level.SEVERE); 
  }
  
  @After
  public void closeAll() throws Exception {
    driver.close();
  }
  
  // @Test
  // public void verifyPDF_LoadedBySeleniumWebdriver()...

}

Weitere Informationen zu Selenium sind auf der Projekt-Site http://seleniumhq.org/ zu finden.