Skip to content

Latest commit

 

History

History
83 lines (65 loc) · 2.54 KB

File metadata and controls

83 lines (65 loc) · 2.54 KB

Engine setup

Promod does not ship its own test runner or browser driver. It wraps Playwright and Selenium WebDriver with a unified API.

Playwright setup

const { chromium } = require('playwright');
const { playwrightWD } = require('promod');
const { browser, $, $$ } = playwrightWD;

async function setup() {
  const launched = await chromium.launch({ headless: false });
  browser.setClient({ driver: launched });
}

setClient accepts:

Parameter Type Description
driver Browser (Playwright) Launched browser instance
lauchNewInstance () => Promise<Browser> Factory to create new browser instances for runNewBrowser()
baseConfig object Default context config (viewport, userAgent, isMobile)

Selenium WebDriver setup

const { Browser, Builder } = require('selenium-webdriver');
require('chromedriver');
const { seleniumWD } = require('promod');
const { browser, $, $$ } = seleniumWD;

async function setup() {
  const driver = await new Builder().forBrowser(Browser.CHROME).build();
  browser.setClient({
    driver,
    lauchNewInstance: () => new Builder().forBrowser(Browser.CHROME).build(),
  });
}

setClient accepts:

Parameter Type Description
driver ThenableWebDriver Selenium WebDriver instance
lauchNewInstance () => Promise<ThenableWebDriver> Factory for runNewBrowser()

Engine switcher

A common pattern is to select the engine via an environment variable:

const { chromium } = require('playwright');
const { Browser, Builder } = require('selenium-webdriver');
const { playwrightWD, seleniumWD } = require('promod');

const { ENGINE } = process.env; // 'pw' or 'swd'

async function getEngine() {
  if (ENGINE === 'pw') {
    const launched = await chromium.launch({ headless: false });
    playwrightWD.browser.setClient({ driver: launched });
    return playwrightWD;
  } else {
    require('chromedriver');
    const driver = await new Builder().forBrowser(Browser.CHROME).build();
    seleniumWD.browser.setClient({
      driver,
      lauchNewInstance: () => new Builder().forBrowser(Browser.CHROME).build(),
    });
    return seleniumWD;
  }
}

module.exports = { getEngine };