paul_wagner.qa

Proof of concept

QA Test Lab

Playwright tests in TypeScript covering end-to-end portfolio journeys, REST API behaviour, and responsive rendering. They run in GitHub Actions. You can start a run yourself, or read the saved results below.

I’m building hands-on experience with Playwright and TypeScript here.

Idle, showing saved results

generated 14 Sept 2026, 09:13 UTC

view on Actions

58

passed

0

failed

59

total tests

13.8s

duration

Results

Saved with the current build

API · REST sandbox

api.spec.ts

  • GET /posts/1 returns 200 with a valid schema, passed 97ms
  • GET /posts returns the full collection, passed 87ms
  • GET /users/1 returns nested address + geo data, passed 127ms
  • CRUD lifecycle: create, update, delete, passed 1.1s
  • returns 404 for a non-existent resource, passed 81ms

E2E · Portfolio

e2e.portfolio.spec.ts

  • loads with the correct QA Engineer title and single H1, passed 886ms
  • declares a language and renders the hero pitch, passed 851ms
  • exposes a downloadable CV with a real PDF target, passed 910ms
  • renders the core sections, passed 956ms
  • keeps secondary portfolio work and earlier experience collapsed until requested, passed 1.2s
  • opens a video from the expanded portfolio without duplicate controls, passed 877ms
  • reveals the original project and video logos on hover or keyboard focus, passed 1.8s
  • has a working skip-to-content accessibility link, passed 904ms
  • uses the WhatsApp brand mark and keeps em dashes out of page copy, passed 984ms
  • runs the QA demo from the dedicated Test Lab page, passed 759ms
  • builds a richer quote estimate without leaving the page, passed 1.4s
  • loads with the correct QA Engineer title and single H1, passed 941ms
  • declares a language and renders the hero pitch, passed 1.1s
  • exposes a downloadable CV with a real PDF target, passed 1.2s
  • renders the core sections, passed 1.1s
  • keeps secondary portfolio work and earlier experience collapsed until requested, passed 1.2s
  • opens a video from the expanded portfolio without duplicate controls, passed 1.0s
  • reveals the original project and video logos on hover or keyboard focus, passed 1.5s
  • has a working skip-to-content accessibility link, passed 726ms
  • uses the WhatsApp brand mark and keeps em dashes out of page copy, passed 850ms
  • runs the QA demo from the dedicated Test Lab page, passed 799ms
  • builds a richer quote estimate without leaving the page, passed 1.1s
  • keeps homepage, blog, and Test Lab navigation consistent, passed 962ms
  • keeps homepage, blog, and Test Lab navigation consistent, passed 731ms
  • opens the quote builder from the services page, passed 797ms
  • opens the quote builder from the services page, passed 644ms
  • share options are reachable outside the article header and dismiss with Escape, passed 769ms
  • lists at least one post and navigates into it, passed 757ms
  • share options are reachable outside the article header and dismiss with Escape, passed 897ms
  • lists at least one post and navigates into it, passed 605ms
  • serves a styled 404 page, passed 572ms
  • serves a styled 404 page, passed 646ms
  • publishes canonical recruiter metadata and grounded Person schema, passed 790ms
  • points crawlers to the generated sitemap and keeps the 404 out of search, passed 705ms
  • publishes canonical recruiter metadata and grounded Person schema, passed 776ms
  • points crawlers to the generated sitemap and keeps the 404 out of search, passed 622ms

Presentation · Responsive and motion

e2e.presentation.spec.ts

  • every built page fits phone, tablet and desktop widths, passed 7.0s
  • experience precedes web builds and expanded work fits a narrow phone, passed 780ms
  • mobile menu closes after an anchor and with Escape, passed 651ms
  • floating navigation expands on scroll and ambient motion respects user preference, passed 1.2s
  • subpage navigation keeps the same sticky expansion contract, passed 1.7s
  • commercial mobile menus expose page navigation and close with Escape, passed 851ms
  • indexable core content remains visible without JavaScript, passed 921ms
  • booking language controls update content and survive a reload, passed 746ms
  • calculator inputs still update the results, passed 572ms
  • every built page fits phone, tablet and desktop widths, skipped Skipped
  • experience precedes web builds and expanded work fits a narrow phone, passed 759ms
  • mobile menu closes after an anchor and with Escape, passed 859ms
  • floating navigation expands on scroll and ambient motion respects user preference, passed 1.3s
  • subpage navigation keeps the same sticky expansion contract, passed 1.8s
  • commercial mobile menus expose page navigation and close with Escape, passed 630ms
  • indexable core content remains visible without JavaScript, passed 900ms
  • booking language controls update content and survive a reload, passed 740ms
  • calculator inputs still update the results, passed 566ms

Tests defined in tests/e2e.portfolio.spec.ts, tests/e2e.presentation.spec.ts, and tests/api.spec.ts · orchestrated by .github/workflows/tests.yml