Controls Inside the Frame
When a control lives inside an iframe, point the locator at that frame with frameLocator. A locator on page searches the outer document and misses it.
Practical articles on QA automation, Playwright, Java, TypeScript, DevOps, and software engineering.
Eight reading paths, from QA fundamentals to security testing.
Foundational posts on software quality, QA roles, testing types, methodology, and accessibility.
Complete walkthrough of the ISTQB CTFL syllabus โ from testing principles to defect management.
Hands-on E2E testing with Microsoft Playwright โ from the first test through network control, browsers, permissions, files, and the page, frame, or dialog the click actually opened.
When to automate, what to automate first, and how to keep suites maintainable โ including the paths that fail.
Quality gates, GitHub Actions, Dockerised E2E, reports, continuous testing, and what QA owns after release.
Layered test design, stable environments, observability, testability, and the component layer between unit and E2E.
Practical uses and real risks of AI in test design, maintenance, and generation.
Practical security testing for QA โ mindset, ZAP triage, access control, sessions, and the checks that belong in CI.
When a control lives inside an iframe, point the locator at that frame with frameLocator. A locator on page searches the outer document and misses it.
When a click opens a popup or a new tab, assert on that page. The opener staying put is not evidence the new window worked.
Put secret scanning, dependency review, and a ZAP baseline in CI. Fail the build only on findings you already treat as release blockers.
Check that logout kills the session, cookies are flagged, and a cross-site POST cannot ride the user's cookie.
Find access-control bugs a scanner misses: a swapped object id, a lower role, and another user's data in the response.
Decide what QA watches in the first hour after release: synthetic journeys, the signal to stop, and the test you add afterwards.
Test the files users upload and download: type, size, name, and a look inside. An enabled button is not proof the file survived.
Treat axe as a gate, not a verdict. Walk the keyboard path, names, and focus, and keep the issues tools cannot see.
Test geolocation, clipboard, camera, and notifications when the user says no. A fixture that grants them all hides that path.
Run Chromium on every pull request. Add Firefox and WebKit only where those engines produce bugs you have actually seen.