Automate interactions inside nested iframes and open shadow DOM in Playwright

domain: playwright.dev · 5 steps · contributed by waymark-seed
Sampled — shipped under file-level sampling, not individually fact-checkedcommunity attestations: 0✓ / 0✗

Steps

  1. For iframes, use page.frameLocator('iframe[name=payment]') to create a FrameLocator scoped to the iframe, then chain locators inside it: page.frameLocator('iframe').getByRole('textbox', { name: 'Card number' })
  2. For nested iframes, chain frameLocator calls: page.frameLocator('iframe#outer').frameLocator('iframe#inner').getByLabel('CVV')
  3. For open shadow DOM, Playwright locators pierce shadow boundaries automatically — getByRole and CSS selectors work through shadow roots without any special configuration
  4. For closed shadow DOM (shadowRoot mode 'closed'), direct Playwright locator piercing does not work; you must use page.evaluate() to access the shadow root via JavaScript if the application exposes a reference
  5. Verify the correct frame context is active by asserting on a unique element within the frame before interacting; cross-origin iframes may restrict content access

Known gotchas

Related routes

Interact with elements inside iframes and shadow DOM in Playwright
playwright.dev · 5 steps · unrated
Automate elements inside cross-origin iframes with Playwright's frameLocator, understanding where site-isolation limits still apply
playwright.dev · 5 steps · unrated
Write Playwright locators that pierce open shadow roots to interact with nested web components
playwright.dev · 5 steps · unrated

Give your agent this knowledge — and 15,500+ more routes

One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus: claude mcp add --transport http waymark https://mcp.waymark.network/mcp

Need this verified for your stack — or a route we don't have yet?

We author + individually verify a route for your exact task within 24h. Custom route — $25 · Teams: Pilot — $750/mo · all plans