Source: config.js

"use strict";
/**
 * Configures `GlaceJS` before tests run.
 *
 * @namespace GlaceConfig
 * @prop {object} web - Web options.
 * @prop {boolean} [web.use=false] - Flag to use web.
 * @prop {string} [web.url] - URL of web application.
 * @prop {string} [web.platform=pc] - Platform type.
 * @prop {string} [web.browser] - Browser name.
 * @prop {object} webdriver - Webdriver options.
 */

var expect = require("chai").expect;
var logfmt = require("logfmt");
var U = require("glace-utils");

var config = U.config;
var args = config.args;

config.webdriver = U.defVal(config.webdriver, {});

config.web = U.defVal(config.web, {});
config.web.uiTimeout = 5;
config.web.pageTimeout = 60;
config.web.use = U.defVal(!!args.web, false);
config.web.url = U.defVal(args.webUrl);
config.web.platform = U.defVal(args.platform, "pc");
[ config.web.width, config.web.height ] = U.defVal(args.webResolution, "").split("x");
config.web.width = config.web.width && parseInt(config.web.width);
config.web.height = config.web.height && parseInt(config.web.height);
config.web.seleniumOpts = {
    drivers: {
        chrome: {
            version: "2.46",
        },
    },
};

config.chrome = U.defVal(config.chrome, {});
config.chrome.incognito = U.defVal(args.chromeIncognito, false);
config.chrome.headless = U.defVal(args.chromeHeadless, false);

if (args.chromeOptions) {
    config.chrome.options = logfmt.parse(args.chromeOptions.replace(/'/g, "\""));
}

expect(["pc", "android", "ios"],
    "Invalid `--platform` value").include(config.web.platform);

var desired = config.webdriver.desiredCapabilities = {};

if (args.seleniumAddress) {
    var [ host, port ] = args.seleniumAddress.split(":");
    if (host) config.webdriver.host = host;
    if (port) config.webdriver.port = port;
};

if (config.web.platform === "pc") {
    config.web.isDesktop = true;
    desired.browserName = U.defVal(args.browser, "chrome").toLowerCase();
    if (desired.browserName === "chrome") {
        desired.chromeOptions = {
            args: [ "test-type",
                "start-maximized",
                "disable-infobars",
                "enable-precise-memory-info" ],
            prefs: {
                "credentials_enable_service": false,
                "profile": {
                    "password_manager_enabled": false,
                },
            },
            excludeSwitches: [
                "enable-automation",
            ],
            useAutomationExtension: false,
        };

        if (config.chrome.incognito) {
            desired.chromeOptions.args.push("incognito");
        };

        if (config.chrome.headless) {
            desired.chromeOptions.args.push("headless");
        }

        if (config.chrome.options) {
            for (var [k, v] of Object.entries(config.chrome.options)) {
                if (v === true) {
                    desired.chromeOptions.args.push(k);
                } else {
                    desired.chromeOptions.args.push(k + "=" + v);
                }
            }
        }
    };
} else {
    config.web.isMobile = true;
    desired.deviceName = args.device;
    desired.platformVersion = String(args.osVersion);
    if (args.udid) {
        desired.udid = args.udid;
    };
    if (config.web.platform === "android") {
        config.web.isAndroid = true;
        desired.browserName = U.defVal(args.browser, "chrome").toLowerCase();
        desired.platformName = "Android";
    };
    if (config.web.platform === "ios") {
        config.web.isIos = true;
        desired.browserName = U.defVal(args.browser, "safari").toLowerCase();
        desired.platformName = "iOS";
        desired.automationName = args.iosEngine || "XCUITest";
    };
};
config.web.browser = U.defVal(config.webdriver.desiredCapabilities.browserName);

module.exports = config;