Verifying text in PDF documents with Foxit Reader

Author: Ralph Mayr

The output of an application might often be produced as a PDF document. Being able to verify that the contents of such a PDF document are valid and correct is very useful for automated testing.

This blog entry describes how you can easily validate such a PDF, by using the built-in TextExists method of Silk Test in combination with the free PDF Reader Foxit Reader.

Note: The procedure is described based on Silk4J, the Silk Test plug-in for Eclipse, but can also be performed with the other Silk Test clients.

We performed the following actions to validate the text contents of a sample PDF, downloaded from the data sheets Borland website, with Silk Test and the Foxit Reader:

  1. Download and install Foxit Reader from http://www.foxitsoftware.com/german/products/reader/.
  2. Make the Foxit Reader the standard program to open PDFs.
  3. In Silk4J, create a new Silk4J project for the Borland website, www.borland.com.
  4. Record a simple test case that downloads the sample PDF and opens it in the Foxit Reader.

The test includes a step to convert the PDF to plain text by pressing Ctrl+6. With plain text, the test validates that a specific text is included in the PDF by using the TextExist method.

The following sample code includes the entire recorded script. In this example, we use a simple verification to verify that the PDF contains the string Silk4J:

desktop.<DomLink> find("//BrowserApplication//BrowserWindow//A[@textContents='Resources']").click();
desktop.<DomLink> find("//BrowserApplication//BrowserWindow//A[@textContents='Resource search']").click();
desktop.<DomListBox> find("//BrowserApplication//BrowserWindow//SELECT[@id='p_lt_CMSWebPartZone5*']").select("Datasheet"); desktop.<DomListBox>
find("//BrowserApplication//BrowserWindow//SELECT[@id='p_lt_CMSWebPartZone5*'][2]").select("Automated Testing");
desktop.<DomListBox> find("//BrowserApplication//BrowserWindow//SELECT[@id='p_lt_CMSWebPartZone5*'][3]").select("Silk Test");
desktop.<DomButton> find("//BrowserApplication//BrowserWindow//INPUT[@class='ContentButton']").click();
desktop.<DomLink> find("//BrowserApplication//BrowserWindow//A[@textContents='Read more »'][3]").click();
desktop.<DomLink> find("//BrowserApplication//BrowserWindow//A[@textContents='Read more »']").click();
desktop.<Control> find("/Window[@caption='*Foxit Reader']//Control[@caption='Reader']").typeKeys("<Left Ctrl+6>");
Assert.assertTrue(desktop.<TextField> find("/Window[@caption='*Foxit Reader']//TextField").textExists("Silk4J"));