From 1bb2f3bd73014f04575035585c951e926f50db0e Mon Sep 17 00:00:00 2001 From: NullVoxPopuli Date: Mon, 13 Apr 2020 21:03:34 -0400 Subject: [PATCH] feat: support browser args --- packages/remote/src/index.js | 42 ++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/packages/remote/src/index.js b/packages/remote/src/index.js index c56a0fb7b..57a117099 100644 --- a/packages/remote/src/index.js +++ b/packages/remote/src/index.js @@ -6,6 +6,7 @@ const { } = require('./cp'); require('@faltest/utils/src/require-before-webdriverio'); const { remote } = require('webdriverio'); +const path = require('path'); const psList = require('ps-list'); const fkill = require('fkill'); const getPort = require('get-port'); @@ -19,6 +20,9 @@ const { defaults } = require('@faltest/utils'); // We aren't using `@wdio/cli` (wdio testrunner) process.env.SUPPRESS_NO_CONFIG_WARNING = 'true'; +let configDir = process.env.FALTEST_CONFIG_DIR || process.cwd(); + + let port; const webDriverRegex = /^(chromedriver(?:\.exe)?|geckodriver)$/; @@ -163,7 +167,7 @@ async function spawnWebDriver(name, args) { if (process.platform === 'win32') { let { emit } = webDriver; - webDriver.emit = function(eventName, exitCode) { + webDriver.emit = function (eventName, exitCode) { if (eventName === 'exit' && exitCode === 1) { return true; } @@ -179,6 +183,18 @@ async function spawnWebDriver(name, args) { return webDriver; } +function loadConfig() { + try { + return require(path.resolve(configDir, '.faltestrc.js')); + } catch (err) { + if (err.code !== 'MODULE_NOT_FOUND') { + throw err; + } + + return {}; + } +} + function startWebDriver(options = {}) { return log(async () => { if (!yn(process.env.WEBDRIVER_DISABLE_CLEANUP)) { @@ -232,12 +248,20 @@ function stopWebDriver(webDriver) { }); } -async function getCapabilities({ - customizeCapabilities = (browserName, capabilities) => capabilities, - overrides: { - browser: _browser = getDefaults().browser, - } = {}, -}) { +async function getCapabilities(options) { + let { + browserArgs = [], + customizeCapabilities = (browserName, capabilities) => capabilities, + overrides: { + browser: _browser = getDefaults().browser, + } = {}, + } = options; + + let faltestConfig = loadConfig(); + + let argsFromConfig = (((faltestConfig.options || {}).browsers || {})[_browser] || {}).args || []; + + let capabilities = { browserName: _browser, }; @@ -248,7 +272,7 @@ async function getCapabilities({ switch (_browser) { case 'chrome': { - let args = []; + let args = [...browserArgs, ...argsFromConfig]; if (headless) { args.push('--headless'); } @@ -259,7 +283,7 @@ async function getCapabilities({ break; } case 'firefox': { - let args = []; + let args = [...browserArgs, ...argsFromConfig]; if (headless) { args.push('-headless'); }