Final Review & Gaps

71Final Review & Gaps

What this section is

  • Self-review of the whole ebook — what's covered, where, and how to find it
  • Known gaps and how to fill them externally
  • Suggested next steps after finishing this book
  • One-page "where do I find X?" index

71.1 Coverage matrix — what this ebook covers

TopicWhereDepth
Playwright architecture + internalsModule 1Deep
Locators, strict mode, narrowingModule 2, 11 (interactive), 42 (XPath)Deep
UI interactions, dialogs, downloads, drag/dropModule 2, 22 (popups deep-dive)Deep
Fixtures, parallelism, config, projectsModule 3Deep
Network mocking, HAR, trace viewer, debug toolsModule 4, 39 (mocking deep-dive)Deep
API testing (Playwright request)Module 5Deep
REST Assured (Java)Module 6Solid
API chaining (sequential + DAG)Module 12Deep
Postman + auth + JWT + OAuth1 vs 2Module 17Deep
HTTP status codes (all classes)Module 25Deep
Database testing + JDBC + Node pgModule 7Solid
CI/CD with GitHub ActionsModule 8Deep
Cloud execution + BrowserStackModule 29Solid
Flakiness — root causes & playbookModule 32Deep
JavaScript fundamentalsModule 18Deep
TypeScript fundamentalsModule 19Deep
Python PlaywrightModule 21Solid
Manual testing fundamentalsModule 24Solid
Test automation architectureModule 20Deep
SDET system designModule 26, 38 (fundamentals)Deep
Test data managementModule 31Solid
Left-shift / right-shift, contract tests, canariesModule 30Solid
BDD with CucumberModule 27Solid
AI in testing — MCP, Agents, LLM-as-judgeModule 28Deep
Visual regressionModule 13Solid
AccessibilityModule 14Solid
Performance + Web Vitals + LighthouseModule 15Solid
Mobile + device emulationModule 16Solid
Coding round — patterns + 36 problemsModule 9, 23, 37 (DSA fundamentals)Deep
Behavioral + scenario + LLM testingModule 10Deep
Interview Q&A by experienceModule 33Deep
Playwright cheat sheetModule 34Reference
Mocking strategiesModule 39Deep
Reporting & observabilityModule 40Deep
Git for SDETsModule 41Deep
XPath practice / SelectorsHub patternsModule 42Deep
Blockchain / DLT for testersModule 36Solid

71.2 Known gaps (be honest)

GapWhy not deeper hereWhere to learn
Selenium 4 specificallyPlaywright-focused ebookSauce Labs docs, Selenium official docs
WireMock detailed scenariosTouched in Module 39WireMock.org tutorials
k6 / Gatling load testingTouched in Module 15k6.io docs, Gatling academy
Mobile native automation (Appium)Web-focused; mobile-web coveredAppium docs
Pact contract testing detailsMentioned in 30/39pact.io documentation
Kubernetes deep-dive for test infraSDET-targeted, k8s is its own topicKubernetes docs, "Kubernetes Up & Running"
Specific cloud SDKs (AWS / GCP / Azure)Generic patterns coveredVendor learning portals
Hyperledger Fabric chaincode in depthTouched in 36hyperledger-fabric.readthedocs.io
Solidity smart contract developmentTesting-side touchedsolidity-lang.org, CryptoZombies tutorial
WebSocket / gRPC testingLimited mentionPostman WebSocket support; grpcurl + Playwright route for WS

71.3 Suggested next steps

  1. Build a portfolio project. One Playwright TS framework with: POM, custom fixtures, API + UI + DB tests, GitHub Actions, Allure report. Open-source on GitHub. Mention in your CV.
  2. Contribute to Playwright. Even small docs PRs are credible signal in interviews.
  3. Take one paid course on system design. Grokking the System Design Interview / DesignGurus / educative.io. Reinforces Module 26 & 38.
  4. Read one architecture book. "Designing Data-Intensive Applications" by Kleppmann is the gold standard.
  5. Set up a personal CI lab. Free tier of GitHub Actions; run Playwright against any open API. Practice debugging real failures.
  6. Mock interview. Pramp, interviewing.io for live practice.

71.4 Quick "where do I find X?" index

Looking for…Go to
How to write your first Playwright test1.7 (Module 1)
getByRole vs getByText priority order2.2 (Module 2)
storageState authentication3.9 (Module 3)
page.route mocking4.1 (Module 4)
API testing with PlaywrightModule 5 (whole)
JWT structure / OAuth1 vs OAuth217.3 / 17.4 (Module 17)
4-shard GitHub Actions YAML8.3 (Module 8)
The promise-first pattern4.4 (Module 4), 22 (Module 22)
Why tests pass locally fail CI32 (entire)
OOP in POM (encapsulation/inheritance/abstraction/polymorphism)10.1 (Module 10)
LLM testing / prompt injection10.6 (Module 10), Module 28
SDET system design (architecture interview)Module 26 + 38
Coding round patterns9.1 (Module 9), entire 23, entire 37
XPath practice (axes, contains, etc.)Module 42 (entire)
Git workflow + bisectModule 41
Visual regression with masking13.4 (Module 13)
Web Vitals (LCP, INP, CLS)15.1 (Module 15)
Cucumber Gherkin syntax27.2 (Module 27)
Test data factory + tenant isolation31.3 / 31.5 (Module 31)
Mock vs stub vs spy vs fake39.1 (Module 39)
Custom Playwright reporter40.5 (Module 40)
CAP theorem38.6 (Module 38)
Manual testing — STLC, severity vs priority24.1 / 24.7 (Module 24)

71.5 Quick-Reference Code Patterns

Common patterns that span multiple modules — copy-paste starting points.

Fixture composition template

import { test as base } from "@playwright/test";
import { LoginPage } from "./pages/LoginPage";
import { ApiClient } from "./utils/ApiClient";

type Fixtures = { loginPage: LoginPage; api: ApiClient; authToken: string };

export const test = base.extend<Fixtures>({
  api: async ({}, use) => {
    const client = new ApiClient(process.env.API_BASE_URL!);
    await use(client);
    await client.cleanup();
  },

  authToken: async ({ api }, use) => {
    const token = await api.createTestUser();
    await use(token);
    await api.deleteTestUser(token);
  },

  loginPage: async ({ page, authToken }, use) => {
    await page.context().addCookies([{ name: "token", value: authToken, domain: "localhost", path: "/" }]);
    await use(new LoginPage(page));
  },
});

Page Object Model skeleton

import { type Page, type Locator } from "@playwright/test";

export class CheckoutPage {
  readonly page: Page;
  readonly proceedBtn: Locator;
  readonly orderTotal: Locator;

  constructor(page: Page) {
    this.page       = page;
    this.proceedBtn = page.getByRole("button", { name: /proceed to payment/i });
    this.orderTotal = page.getByTestId("order-total");
  }

  async goto() { await this.page.goto("/checkout"); }

  async getTotal(): Promise<number> {
    const text = await this.orderTotal.textContent();
    return parseFloat(text?.replace(/[^0-9.]/g, "") ?? "0");
  }

  async proceed() {
    await this.proceedBtn.click();
    await this.page.waitForURL("**/payment");
  }
}

API + UI hybrid test pattern

import { test, expect } from "@playwright/test";

test("order visible after API creation", async ({ page, request }) => {
  const resp = await request.post("/api/orders", {
    data: { product_id: "PRD-001", qty: 2 }
  });
  expect(resp.ok()).toBeTruthy();
  const { order_id } = await resp.json();

  await page.goto(`/orders/${order_id}`);
  await expect(page.getByTestId("order-id")).toContainText(order_id);
  await expect(page.getByTestId("order-status")).toHaveText("pending");
});

Global setup — auth state once per run

// global-setup.ts
import { chromium } from "@playwright/test";

export default async function globalSetup() {
  const browser = await chromium.launch();
  const context = await browser.newContext();
  const page    = await context.newPage();

  await page.goto(process.env.BASE_URL + "/login");
  await page.fill('[name=email]',    process.env.TEST_EMAIL!);
  await page.fill('[name=password]', process.env.TEST_PASS!);
  await page.click('[type=submit]');
  await page.waitForURL("**/dashboard");

  await context.storageState({ path: "playwright/.auth/user.json" });
  await browser.close();
}
// playwright.config.ts: globalSetup: "./global-setup"
// use: { storageState: "playwright/.auth/user.json" }

71.6 Final pep talk

You don't need to know everything in this book to get an SDET job. You need to:
  • Master one automation tool deeply — that's Playwright here.
  • Speak clearly about concepts — locators, fixtures, parallelism, flakiness, mocking, CI.
  • Tell stories with numbers (STAR with metrics).
  • Show you can think, not memorise.
  • Be honest about gaps. "I haven't used Pact, but here's how I'd approach it…" beats fake fluency.

Good luck. The book stays on your disk; come back to it any time.

— End of Ebook —

v3.0 · built offline · ~1.0 MB · 69 sections (Home + 68 modules) · 1000+ Q&A