Playwright를 사용하여 복잡한 그래픽이 풍부한 PDF 문서 검증
이 예에서 사용할 pdf 문서는 "Tesla Powerwall 2 Datasheet"입니다. 이 파일은 다음 위치에서 호스팅됩니다https://oedtrngbj.wpengine.com/wp-content/uploads/Powerwall_2_AC_Datasheet_EN_NA.pdf.
이 PDF 문서에는 여러 페이지, 일부 그림 및 표가 포함되어 있습니다.
주의 사항
이 접근 방식에서 발생한 다음 문제에 대해 솔직하게 말씀드리겠습니다.
이러한 타협에 만족한다면 계속 읽으십시오!
page.setContent() + toMatchSnapshot() = 🤩
setContent()
를 사용하여 pdf를 다음과 같이 iframe
에 로드합니다. const pdfResource =
'https://oedtrngbj.wpengine.com/wp-content/uploads/Powerwall_2_AC_Datasheet_EN_NA.pdf';
let iframe = `<iframe src="${pdfResource}#zoom=60" style="width: 100%;height:100%;border: none;"></iframe>`;
await page.setContent(iframe);
await page.waitForTimeout(5000);
NOTE: You may need to experiment with the zoom level, width, height attributes to suit your needs
ANOTHER NOTE: The
waitForTimeout
function is used here to wait for the pdf contents to be loaded into theiframe
Playwrights의 주장
expect(screenshot).toMatchSnapshot(name[, options])
=> https://playwright.dev/docs/test-assertions#screenshot-assertions-to-match-snapshot-1 을 사용하여 로케이터와 일치하는 특정 요소의 스크린샷을 캡처합니다. 이 경우에는 PDF 파일이 완전히 로드된 상태에서 위의 iframe의 스크린샷을 찍어야 합니다. 특정 페이지로.우리의 솔루션은 다음 기능을 사용합니다.
expect(await page.locator('iframe').screenshot()).toMatchSnapshot();
완료된 테스트는 다음과 같습니다 ...
import { test, expect } from '@playwright/test';
test('validate a complex pdf', async ({ page }) => {
const pdfResource =
'https://oedtrngbj.wpengine.com/wp-content/uploads/Powerwall_2_AC_Datasheet_EN_NA.pdf';
let iframe = `<iframe src="${pdfResource}#zoom=60" style="width: 100%;height:100%;border: none;"></iframe>`;
await page.setContent(iframe);
await page.waitForTimeout(5000);
expect(await page.locator('iframe').screenshot()).toMatchSnapshot();
});
테스트를 실행합니다. 다음 오류와 함께 실패해야 합니다.
Playwright는 요소의 골든 스냅샷을 찾지 못했기 때문에 첫 번째 테스트 실행에서 이 파일을 자동으로 생성합니다. 이 파일을 리포지토리에 커밋해야 합니다.
테스트를 다시 실행합니다. 이번에는 비교할 기본 이미지가 이미 있으므로 통과해야 합니다.
좋아, 잘 됐어. 우리는 pdf의 첫 페이지를 검증했습니다.
그러나 야생에서 접하게 될 대부분의 PDF에는 여러 페이지가 포함되어 있습니다. 여러 페이지에 맞게 테스트를 수정하겠습니다.
test('validate a complex pdf II, all pages', async ({page}) => {
const numberOfPages = 2;
for (let i = 1; i < numberOfPages + 1; i += 1) {
let pdfResource =
'https://oedtrngbj.wpengine.com/wp-content/uploads/Powerwall_2_AC_Datasheet_EN_NA.pdf';
let iframe = `<iframe src="${pdfResource}#zoom=60&page=${i}" style="width: 100%;height:100%;border: none;"></iframe>`;
await page.setContent(iframe);
await page.waitForTimeout(5000);
expect(await page.locator('iframe').screenshot()).toMatchSnapshot({
name: `pdf_validation_page_${i}.png`,
});
}
});
작업이 완료되었습니다.
고려해야 할 기타 개선 사항
(모두 전적으로 선택 사항이며 구현하는 것은 전적으로 귀하에게 달려 있습니다)
waitForTimeout
을 제거하고 내용이 로드될 때까지 기다리는 더 나은 방법을 구현합니다. 마지막 해결책
Reference
이 문제에 관하여(Playwright를 사용하여 복잡한 그래픽이 풍부한 PDF 문서 검증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ryanroselloog/validate-complicated-graphics-rich-pdf-documents-using-playwright-1i4l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)