Manuals / Playwright with Python / Ch 1

Part 0 · BackgroundBeginner35 min read

0. What is Playwright, Really

Playwright with Python · 244 pages source format

Playwright’s origin story matters more than it seems. The engineers who built it came from Puppeteer — and designed a second attempt for modern multi-browser web apps.

What you'll learn

  • History — Microsoft, Puppeteer lineage, Jan 2020 public release
  • Open-source, MIT, funded engineering cadence
  • Why it was created: Selenium flakiness, Chrome-only Puppeteer, modern web gaps

History — built by Microsoft, evolved from the Puppeteer team

Why the origin story shows up in interviews

Playwright’s origin story matters more than it seems on the surface. The core engineers who built Playwright — most notably Andrey Lushnikov, Pavel Feldman, and Boris Yankov — were previously on the team at Google that built and maintained Puppeteer, the Node.js library for controlling headless Chrome. When they moved to Microsoft, they took everything they’d learned from Puppeteer’s limitations and built something new instead of iterating on the old codebase.

This “second attempt by the same people” origin is why Playwright feels less like a patched-together tool and more like a deliberately designed one. Puppeteer was built specifically for Chrome/Chromium via the Chrome DevTools Protocol (CDP). Its creators knew intimately where that architecture broke down — mainly, it couldn’t reliably control Firefox or Safari/WebKit. Playwright was designed from day one to solve that: a single API surface that talks to all three major browser engines.

First released publicly in January 2020, Playwright is comparatively young next to Selenium (which dates back to 2004). That youth is actually a selling point in interviews — it means the tool was designed with full knowledge of modern web apps (SPAs, shadow DOM, complex async behavior) rather than retrofitted onto assumptions from the mid-2000s web.

Quick check

Playwright’s core engineers previously built which tool?

Do this now

Write one sentence: “Playwright exists because ___.”

Interactive study board
History — built by Microsoft, evolved from the Puppeteer teamDrag stickies · tap for tips
Study mapDrag stickies · tap for tipsKeep it shortdrag · tap →Name the waitdrag · tap →Scope locatorsdrag · tap →Trace when stuckdrag · tap →One browser firstdrag · tap →Isolate statedrag · tap →Assert the UIdrag · tap →Retry wiselydrag · tap →Seed datadrag · tap →Close the loopdrag · tap →Keep it shortdrag · tap →Name the waitdrag · tap →Scope locatorsdrag · tap →Trace when stuckdrag · tap →One browser firstdrag · tap →Isolate statedrag · tap →Pathwise hackdrag · tap →Page under testdrag · tap →Multi-browserdrag · tap →Automation pathdrag · tap →Tooling nodedrag · tap →
Clear?

Open-source, actively maintained, backed by Microsoft

Playwright is MIT-licensed and fully open-source on GitHub. “Backed by Microsoft” isn’t just marketing — it means a dedicated, funded engineering team (not a side project maintained by volunteers in their spare time); a fast release cadence — new minor versions ship roughly every 2–4 weeks, each typically adding real capabilities (not just bug fixes); and integration hooks with the broader Microsoft dev ecosystem (VS Code extension, Azure DevOps pipeline support).

This matters practically: when you hit a rough edge with Playwright, the chance it gets fixed or has a workaround shipped soon is much higher than with a stagnant tool. It’s also a plus for job security in your skillset — companies are less nervous adopting a tool with strong backing versus something that might get abandoned.

  • Dedicated funded engineering team
  • Minor releases roughly every 2–4 weeks
  • VS Code extension and Azure DevOps hooks
Interactive study board
Open-source, actively maintained, backed by MicrosoftDrag stickies · tap for tips
Study mapDrag stickies · tap for tipsKeep it shortdrag · tap →Name the waitdrag · tap →Scope locatorsdrag · tap →Trace when stuckdrag · tap →One browser firstdrag · tap →Isolate statedrag · tap →Assert the UIdrag · tap →Retry wiselydrag · tap →Seed datadrag · tap →Close the loopdrag · tap →Keep it shortdrag · tap →Name the waitdrag · tap →Scope locatorsdrag · tap →Trace when stuckdrag · tap →One browser firstdrag · tap →Isolate statedrag · tap →Pathwise hackdrag · tap →Page under testdrag · tap →Multi-browserdrag · tap →Automation pathdrag · tap →Tooling nodedrag · tap →
Clear?

Why it was created (gaps in Selenium / Puppeteer)

Three concrete gaps drove Playwright’s creation.

Selenium’s flakiness problem: Selenium’s WebDriver protocol requires you to manually manage waits — time.sleep(), explicit waits for specific conditions, etc. Miss a wait condition and your test either fails randomly or clicks the wrong thing because the page hadn’t finished rendering. This was (and still is) the single biggest source of pain in Selenium-based suites.

Puppeteer’s Chrome-only limitation: Puppeteer only ever fully supported Chromium. Cross-browser testing meant maintaining an entirely separate toolchain for Firefox/Safari, which most teams simply didn’t do — meaning bugs specific to non-Chrome browsers shipped to production undetected.

Poor support for modern web patterns: Both older tools struggled with things that are now completely normal on the web: single-page apps with heavy client-side routing, shadow DOM (used by design systems and web components), iframes nested multiple levels deep, and apps that make dozens of async network calls before finishing rendering.

Playwright’s answer to all three: auto-waiting built into the core engine (not bolted on by the test author), native multi-browser support from the start, and locators/APIs specifically designed to pierce shadow DOM and handle iframes without special ceremony.

Interactive study board
Why it was created (gaps in Selenium / Puppeteer)Drag stickies · tap for tips
Study mapDrag stickies · tap for tipsKeep it shortdrag · tap →Name the waitdrag · tap →Scope locatorsdrag · tap →Trace when stuckdrag · tap →One browser firstdrag · tap →Isolate statedrag · tap →Assert the UIdrag · tap →Retry wiselydrag · tap →Seed datadrag · tap →Close the loopdrag · tap →Keep it shortdrag · tap →Name the waitdrag · tap →Scope locatorsdrag · tap →Trace when stuckdrag · tap →One browser firstdrag · tap →Isolate statedrag · tap →Pathwise hackdrag · tap →Page under testdrag · tap →Multi-browserdrag · tap →Automation pathdrag · tap →Tooling nodedrag · tap →
Clear?

Checklist