3.16. Layout - gerenderte Seitenausschnitte

Überblick

Vergleiche kompletter Seiten als gerenderte Bilder bereiten dann Schwierigkeiten, wenn sich auf einer Seite wechselnde Inhalte befinden. Der typische Vertreter für wechselnde Inhalte ist ein Tagesdatum.

Die Syntax für den Vergleich eines gerenderten Seitenausschnitts mit einer Bildvorlage ähnelt der Syntax für den Vergleich einer vollständigen Seite. Sie ist lediglich um eine Positionsangabe für die linke obere Ecke erweitert, mit der das Bild auf der Seite positioniert wird. Der Vergleich selber findet nur auf der Fläche statt, die der Größe des Bildes entspricht.

<!-- Testing a section of a rendered page: -->

<testcase name="..">
  <assertThat testDocument="..">
    <asRenderedPage on="..">              (page selection)
      <isEqualTo positionUpperLeftX=".."  (optional)
                 positionUpperLeftY=".."  (optional)
                 unit=".."                (optional)
                 image=".."               (required)
      />
    </asRenderedPage>
  </assertThat>
</testcase>

Beispiel - Linker Rand auf jeder Seite

Wenn Sie prüfen wollen, ob der linke Rand jeder Seite mindestens 2 cm breit unbedruckt ist, können Sie das folgendermaßen testen:

<testcase name="compareAsRenderedPage_LeftMargin">
  <assertThat testDocument="master/documentUnderTest.pdf">
    <asRenderedPage on="EVERY_PAGE">
      <isEqualTo positionUpperLeftX="0" positionUpperLeftY="0"
                 unit="DPI72"
                 image="master/marginFullHeight2cmWidth.png"
      />
    </asRenderedPage>
  </assertThat>
</testcase>

Die Bilddatei, 2 cm breit und genauso hoch, wie eine ganze Seite, ist leer. Genauer gesagt, enhält sie die Hintergrundfarbe einer Seite. Das Beispiel prüft also, ob der Rand jeder Seite des Dokumentes ebenfalls leer ist.

Jeder Ausschnitt benötigt eine x/y-Position auf der Seite des PDF-Dokumentes. Die Werte 0/0 entsprechen der linken oberen Ecke einer Seite.

Es wird davon ausgegangen, dass jede Seite das gleiche Format hat. Wenn Sie den Seitenrand eines Dokumentes mit unterschiedlichen Seitengrößen testen wollen, müssen Sie für jede Seitengröße einen eigenen Test schreiben.

Beispiel - Logo auf Seite 1 und 2

Sie wollen überprüfen, dass sich das Firmenlogo auf den ausgewählten Seiten an der erwarteten Position befindet:

<testcase name="compareRenderedSectionToImages_ImageAsFilename">
  <assertThat testDocument="images/documentWithLogo.pdf">
    <asRenderedPage onPage="1, 2">
      <isEqualTo positionUpperLeftX="135" positionUpperLeftY="35" 
                 unit="MILLIMETER"
                 image="images/logo.png"
      />
    </asRenderedPage>
  </assertThat>
</testcase>

Mehrfache Vergleiche

In einem Test können mehrere Bildvergleiche auf mehreren Seiten gleichzeitig durchgeführt werden:

<testcase name="compareAsRenderedPage_MultipleInvocation">
  <assertThat testDocument="master/documentUnderTest.pdf">
    <asRenderedPage onPage="3, 4">
      <isEqualTo positionUpperLeftX="0" positionUpperLeftY="0"
                 unit="DPI72"
                 image="master/marginFullHeight2cmWidth.png"
      />
      <isEqualTo positionUpperLeftX="480" positionUpperLeftY="50"
                 unit="DPI72" 
                 image="master/subImage_page3-page4.png"
      />
    </asRenderedPage>
  </assertThat>
</testcase>

Sie sollten sich aber überlegen, ob es nicht besser ist, zwei Tests zu schreiben. Das entscheidende Argument für getrennte Tests ist, dass Sie unterschiedliche Namen für die Tests wählen können. Der hier gewählte Name ist für den Projektalltag nicht gut genug.