87188423b1
Switch from getCDPSessionForPage (creates a new WS via Target.attachToTarget) to getExistingCDPSessionForPage which reuses Playwright's internal CRSession. This is critical for the relay server where Target.attachToTarget is intercepted and cannot create real new sessions. Also add FrameLocator support in accessibilitySnapshot — FrameLocator (from locator.contentFrame()) is now auto-resolved to the real Frame object needed for OOPIF CDP session attachment. - New PlaywrightCDPSessionAdapter wrapping Playwright's CDPSession as ICDPSession - New getExistingCDPSessionForPage() using context.getExistingCDPSession() - resolveFrame() helper converts FrameLocator to Frame via elementHandle().contentFrame() - getAriaSnapshot() frame param now accepts Frame | FrameLocator - Executor CDP cache uses ICDPSession, borrowed sessions detach as no-op - Test for getExistingCDPSession through the relay - Updated framer iframe guide with alternative page.frames() example - Bump playwright submodule to @xmorse/playwright-core@1.59.2 - Fix styles-api.md import path