readySelector is redundant for the abTest() flow. The execution order in preparePage.ts is:
- Navigate to URL
- Wait for readyEvent (if configured)
- Wait for readySelector (if configured) ← this one
- Wait for delay (if configured)
- Run user's testFn ← user gets full page object here
Since users get the Playwright page in their testFn, they can just write await page.waitForSelector('#app-loaded') themselves — one line of code, no config plumbing needed.
The only case where readySelector isn't redundant is the legacy JSON config path (no testFn callback). But for abTest() tests, it's unnecessary machinery.
readySelector is redundant for the abTest() flow. The execution order in preparePage.ts is:
Since users get the Playwright page in their testFn, they can just write await page.waitForSelector('#app-loaded') themselves — one line of code, no config plumbing needed.
The only case where readySelector isn't redundant is the legacy JSON config path (no testFn callback). But for abTest() tests, it's unnecessary machinery.