Verify PDF Content

Visual verification

To verify the rendering and for example images in a pdf, we recommend using visual verification. You can model the PDF content as a Screen and use Screen Elements like Labels and Labels with Values.

Verificiation by parsing the PDF File

To verify large text content, it is recommended to parse the PDF file into a C# object and verify the content directly in code.

An example TestCase is available on Github:

The following chapters guide you through this example.

Access the pdf file from the Execution Host

To enable parsing, first we need to make sure the Execution Host (where the code is actually running) has access directly to the file. TestStep1 contains an example on how to copy the pdf File from the System Under Test to the Execution host, by using a Network Drive. Make sure to setup the Remote Directory Connection String correctly before.

[TestStep(1, TestInput = "Make pdf file accessible for Execution Host")]
public void Step1(ITester t)
{
    //the goal is to parse the .pdf file with the used iText7 Nuget
    //for that the execution host (where to code is running) needs access to the pdf file
    //the following code copies the file from the System Under Test (SUT) to the Execution host using the RemoteDirectory

    //Make sure the connection string to the RemoteDirectory is correctly set on the Test Environment
    //https://docs.testresults.io/designer/interacting-with-the-sut/tabs-overview/environments#remote-directory-connection-string

    string pdfPath = @"C:\\Temp\\";
    string pdfFileName = "myPdf.pdf";
    App.SystemHelpers.SetUpRemoteDirectory(true);
    App.SystemHelpers.CopyFiles(Path.Combine(pdfPath, pdfFileName), App.SystemHelpers.ArtifactsDirectory);
    var remoteDirectoryOnHost = BaseModelHelpers.MapRemoteDirectoryOnHost(t);
    if (!remoteDirectoryOnHost.Exists || remoteDirectoryOnHost.GetFiles(pdfFileName).Length == 0)
        throw new TestStepAbortedException($"Could not read {pdfFileName} on host from remoteDirectory");

    var _pdfPathOnHost = Path.Combine(remoteDirectoryOnHost.FullName, pdfFileName);
}

Parsing the pdf File

In the example project, we use the iText7 Nuget to help parsing the File.

We also implemented a Helper class for the parsing and verification tasks. Add the references Nuget to your Project and copy this Helper class. As iText7 offers a lot of options you can also extend and modify the Helper class according to your needs.

Verifying the pdf Content

TestStep2 contains the Example on how to verify the pdf Content. In this example you can define which text is expected on each page and line:

[TestStep(2,
    TestInput = "Verify the content of the pdf",
    ExpectedResults = "The pdf content is as expected")]
public void Step2(ITester t)
{
    var helper = new PdfValidationHelper(t);
    string pdfPath = _pdfPathOnHost ?? "myPdf.pdf"; //the variable set in TestStep 1 should be used, but for demo purposes also the pdf project item works
    var expectedPdfContent = new List<ExpectedPDFContent>() 
    { 
        new ExpectedPDFContent(page: 1, line: 13, "Maecenas mauris lectus, lobortis et purus mattis, blandit dictum tellus."),                     // expected to pass
        new ExpectedPDFContent(page: 1, line: 13, "Maecenas mauris lectus, lobortis et purus mattis, blandit dictum tellus"),                      // expected to fail, missing the . at the end
        new ExpectedPDFContent(page: 3, line: 20, "In non mauris justo. Duis vehicula mi vel mi pretium, a viverra erat efficitur. Cras aliquam"), // expected to fail, text is different
        new ExpectedPDFContent(page: 3, line: 50, "Lorem ipsum dolor sit amet, consectetur adipiscing elit."),   // expected to fail, only 38 lines on page 3
        new ExpectedPDFContent(page: 5, line: 20, "Lorem ipsum dolor sit amet, consectetur adipiscing elit.")    // expected to fail only 4 pages
    };
    helper.ValidatePDFAndReport(pdfPath, expectedPdfContent);
}

Last updated