@softrams/gauge-taiko-steps
Version:
Implementation of common test steps with Taiko driver for writing tests with Gauge framework
82 lines (67 loc) • 3.17 kB
JavaScript
/* globals gauge*/
;
const taiko = require("taiko");
const path = require("path");
const helpers = require("./_helpers");
const headless = process.env.headless_chrome || 'true';
const browser_for_each_scenario = process.env.browser_for_each_scenario;
const open_browser_after_test = process.env.open_browser_after_test;
// Support to run inside docker
const docker_env = process.env.DOCKER_RUNTIME || 'false';
const docker_args = ['--disable-gpu', '--disable-dev-shm-usage', '--disable-setuid-sandbox', '--no-first-run', '--no-sandbox', '--no-zygote'];
let addl_browser_args = process.env.browser_args ? process.env.browser_args.split(',') : [];
addl_browser_args = process.env.window_size ? addl_browser_args.concat(process.env.window_size) : addl_browser_args;
const browser_args = docker_env === 'true' ? docker_args.concat(addl_browser_args) : addl_browser_args;
const download_dir = process.env.file_download_path;
beforeSuite(async () => {
if (!browser_for_each_scenario || browser_for_each_scenario === 'false') {
await taiko.openBrowser({ headless: headless === 'true', args: browser_args});
}
taiko.setConfig({
navigationTimeout: Number((process.env.navigation_timeout || taiko.getConfig("navigationTimeout"))),
retryInterval: Number((process.env.retry_interval || taiko.getConfig("retryInterval"))),
retryTimeout: Number((process.env.retry_timeout || taiko.getConfig("retryTimeout"))),
waitForEvents: (process.env.wait_for_events ? process.env.wait_for_events.split(",") : taiko.getConfig("waitForEvents")),
highlightOnAction: (Boolean(process.env.highlight_on_action) && process.env.highlight_on_action === "true")
});
});
beforeScenario(async context => {
helpers.storeScenarioData("scenario name", context.currentScenario.name);
if (browser_for_each_scenario === "true") {
await taiko.openBrowser({
headless: headless === 'true',
args: browser_args
});
}
});
beforeStep(async context => {
helpers.storeScenarioData("step name", context.currentStep.step.actualStepText);
});
afterStep(async () => {
if (process.env.screenshot_on_everystep === "true") {
const currentURL = await taiko.currentURL();
if (!currentURL || currentURL !== "about:blank") {
gauge.message(`URL:${currentURL}`);
await gauge.screenshot();
}
}
});
afterScenario(async () => {
await gauge.screenshot({ encoding: 'base64' });
if (process.env.sleep_after_scenario) {
await taiko.waitFor(Number(process.env.sleep_after_scenario));
}
if (browser_for_each_scenario === "true" && (!open_browser_after_test || open_browser_after_test === 'false')) {
await taiko.closeBrowser();
}
});
afterSuite(async () => {
if (browser_for_each_scenario === "false" && (!open_browser_after_test || open_browser_after_test === 'false')) {
await taiko.closeBrowser();
}
});
gauge.customScreenshotWriter = async function () {
const screenshotFilePath = path.join(process.env["gauge_screenshots_dir"], `screenshot-${process.hrtime.bigint()}.png`);
await taiko.screenshot({ path: screenshotFilePath, fullPage: false });
return path.basename(screenshotFilePath);
};