Back to Codeceptjs

expose

docs/plugins/expose.md

4.0.01.9 KB
Original Source
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

expose

Exposes properties from helper instances as injectable test arguments. Use it to access the underlying Playwright/Puppeteer page, the wdio browser client, or any other helper internal directly from a Scenario:

js
Scenario('listen for requests', async ({ I, page, browser }) => {
  page.on('request', r => console.log(r.url()))
  await page.evaluate(() => 1 + 1)
  I.amOnPage('/')
})

The injected value is a live proxy: every property access reads the current helper property, so mid-test reassignments (popups, switchToNextTab, openNewTab) are reflected automatically. Calls are not wrapped as CodeceptJS steps — await page.evaluate(...) runs as native Playwright.

Configuration

inject maps an injection name to a HelperName.propertyName string. A value with no dot is shorthand for "first configured browser helper that exposes this property" (allowed properties: page, browser, browserContext, context).

js
plugins: {
  expose: {
    enabled: true,
    inject: {
      page: 'Playwright.page',
      browser: 'Playwright.browser',
      browserContext: 'Playwright.browserContext',
      frame: 'Playwright.context',  // current frame set by switchTo
      wdio: 'WebDriver.browser',
    }
  }
}

Shorthand:

js
plugins: {
  expose: {
    enabled: true,
    inject: {
      page: 'page',  // resolves to Playwright.page or Puppeteer.page
    }
  }
}

Caveats

  • The injected value is a Proxy, not the actual Page/Browser instance, so page instanceof Page is false. Use duck typing instead.
  • Cached method references lose the live binding. Call page.click(...), not const click = page.click; click(...).
  • In dry-run mode the underlying helper property is undefined; accessing any property on the proxy returns undefined rather than throwing.

Parameters

  • config