Kurz: Worum geht es in diesem Beitrag?
Wir gehen zwei typische Szenarien durch:
- Ein bereits vorhandenes PDF auslesen und den Inhalt gezielt validieren.
- Ein PDF, das der Nutzer erst per Download-Button herunterlädt, direkt im Testlauf abfangen und prüfen – ganz ohne die Datei lokal zu speichern.
Für beide Fälle nutzen wir das npm-Paket pdf-parse sowie KI-Unterstützung, um passende reguläre Ausdrücke zu erzeugen.

Installation: pdf-parse einbinden
Ich gehe davon aus, dass bereits ein Playwright-Projekt existiert. Falls nicht, lässt sich eines mit npm init playwright@latest anlegen.
Die Installation von pdf-parse ist mit einem einzigen Befehl im Projektverzeichnis erledigt:
npm install pdf-parse --save-dev
Damit wird das Paket automatisch in die package.json eingetragen.
Anschließend wird das Modul im Test importiert:
import pdf from 'pdf-parse';
💡 Hinweis: Node-Version beachten
Beim Testen ist mir aufgefallen, dass pdf-parse in Version 2.x eine neuere Node.js-Version voraussetzt (>=20.16.0). Falls du beim Test-Lauf Fehler wie DOMMatrix is not defined oder process.getBuiltinModule is not a function bekommst, liegt das fast immer an einer älteren Node-Version. Kein Grund zur Sorge – zwei Optionen:
- Node über nvm auf mindestens
20.16.0 aktualisieren, oder
- alternativ die ältere, stabile Version
pdf-parse@1.1.1 verwenden (dafür ändert sich nur die Import-Syntax leicht)
Da für dieses Tutorial nur das grundlegende Auslesen von PDF-Text benötigt wird, verwende ich hier bewusst Variante zwei:

Siehe danach auch die Package.json:

Die restlichen Code-Beispiele in diesem Beitrag beziehen sich auf diese Version.
PDF-Inhalt auslesen
Der erste Test dafür ist schnell aufgesetzt: Wir öffnen das PDF per fetch(), wandeln die Antwort in einen Buffer um und übergeben diesen an pdf-parse.
import { test, expect } from '@playwright/test';
import pdf from 'pdf-parse';
test('PDF-Inhalt auslesen', async () => {
const response = await fetch('https://www.ihk.de/blueprint/servlet/resource/blob/5581278/1cafa7f203df9d83e050d9f01677ffe6/rechnung-kleinunternehmer-data.pdf');
const buffer = await response.arrayBuffer();
const data = await pdf(Buffer.from(buffer));
console.log(data.text);
});
Als Beispiel verwende ich die Musterrechnung für Kleinunternehmer der IHK – ein öffentlich zugängliches PDF, das sich ideal zum Üben eignet, da es typische Rechnungsfelder wie Rechnungsnummer, Rechnungsbetrag und IBAN enthält.
Führt man den Test aus, wird der komplette Textinhalt des PDFs in der Konsole ausgegeben.

Damit ist das Auslesen erledigt – die halbe Miete ist geschafft.
Präzise validieren: Reguläre Ausdrücke mit KI generieren
Der reine Textinhalt ist erst mal nur ein langer String. Eine einfache Prüfung könnte also so aussehen:
expect(data.text).toContain('2022-10001');
Das funktioniert, ist aber ungenau: Man prüft nur, ob die Zeichenfolge irgendwo im Dokument vorkommt – nicht, ob sie tatsächlich zur Rechnungsnummer gehört. In der IHK-Musterrechnung steht die Nummer im Format Rechnung Nr. 2022-10001 – genau dieses Muster wollen wir gezielt validieren.
Für präzisere Prüfungen eignen sich reguläre Ausdrücke deutlich besser. Da das manuelle Erstellen von Regex-Mustern oft mühsam ist, lohnt es sich, ein KI-Tool wie GitHub Copilot, ChatGPT oder Cursor damit zu beauftragen. Ein Prompt könnte etwa so aussehen:
Erstelle einen Regex für einen String, um in diesem Text ein Feld mit dem Label 'Rechnung Nr.' und der zugehörigen Nummer zu validieren.
Klingt gut, oder ? 🙂

Das Ergebnis lässt sich direkt in den Test übernehmen. Optional lässt sich auf die gleiche Weise natürlich auch der Rechnungsbetrag oder die IBAN prüfen.
Im Ergebnis entstehen nun folgende zwei Tests um die Rechnungsnummer- und den Betrag zu validieren:

Praxisbeispiel: Heruntergeladenes PDF testen
Bisher haben wir ein bereits vorhandenes PDF ausgelesen. In der Praxis lädt man ein PDF aber oft erst per Klick in der Anwendung herunter. Für dieses Szenario braucht es einen etwas anderen Ansatz.
Zunächst navigiert man zur entsprechenden Seite der eigenen Anwendung:
await page.goto('https://deine-anwendung.de/download-seite');
Der Trick beim Testen von Downloads: Man muss das download-Event abfangen, ohne den richtigen Zeitpunkt zu verpassen. Dafür kombiniert man das Warten auf das Event und den Klick auf den Download-Button in einem Promise.all:
const [download] = await Promise.all([
page.waitForEvent('download'),
page.getByRole('button', { name: 'Download PDF' }).click(),
]);
Die Download-Daten auslesen
Jetzt wird es spannend und ich hatte vorab auch keine Erfahrung mit dieser Lösung: Anstatt die heruntergeladene Datei physisch zu speichern und erneut einzulesen, liest man den Datenstream direkt aus – das erspart unnötigen Datenmüll auf dem eigenen System. Dazu genügt eine kleine Hilfsfunktion, die den Download-Stream in einen Buffer überführt:

Da die PDF-Datei von einer fremden Domain (Cross-Origin) stammt, wird sie zunächst im Browserkontext per fetch() als Blob geladen und daraus eine Blob-URL erzeugt. Über einen unsichtbaren Download-Link mit dieser Blob-URL löst man dann gezielt das download-Event aus:

Den entstandenen Buffer übergibt man anschließend direkt an pdf-parse:

Führt man den Test jetzt aus, wird das PDF wie erwartet per Blob-URL heruntergeladen, der Stream direkt in einen Buffer gelesen und der Inhalt erfolgreich validiert.
Tipps für bessere Ergebnisse
- 1. Regex nicht manuell schreiben: Ein KI-Tool liefert in Sekunden ein passendes Muster – Zeit, die man sich sparen sollte.
- 2. Keine physischen Dateien anlegen: Bei Downloads immer den Datenstream direkt verarbeiten statt Dateien im Testsystem zu erzeugen.
- 3. Präzise statt pauschal validieren:
toContain reicht für schnelle Checks, für belastbare Tests sind Regex-Muster die bessere Wahl.
- 4. Promise.all nutzen: So verpasst man beim Abfangen von Download-Events keinen Timing-Fehler.
Fazit: Einfacher als gedacht
Die Eingangsfrage war: Lässt sich das Testen von PDF-Dokumenten in Playwright wirklich einfach automatisieren?
Die Antwort: Ja. :- ) Mit pdf-parse, ein paar Zeilen Code und KI-generierten Regex-Mustern lassen sich sowohl statische als auch dynamisch heruntergeladene PDF-Dateien zuverlässig in die eigene Playwright-Testsuite integrieren – ganz ohne unnötigen Aufwand.
Weiterführende Links