UNPKG

@applitools/eyes-nightwatch

Version:

Applitools Eyes SDK for Nightwatch.js

214 lines (213 loc) 9.7 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.build = exports.findElements = exports.findElement = exports.toSimpleCommonSelector = exports.toSelector = exports.toElement = exports.toDriver = exports.isSelector = exports.isSecondaryElement = exports.isSecondaryDriver = void 0; const spec = __importStar(require("@applitools/spec-driver-webdriver")); const utils = __importStar(require("@applitools/utils")); __exportStar(require("@applitools/spec-driver-webdriver"), exports); const byHash = ['className', 'css', 'id', 'js', 'linkText', 'name', 'partialLinkText', 'tagName', 'xpath']; function isByHashSelector(selector) { return byHash.includes(Object.keys(selector)[0]); } const XPATH_SELECTOR_START = ['/', '(', '../', './', '*/']; function isXpathSelector(selector) { return XPATH_SELECTOR_START.some(start => selector.startsWith(start)); } function isSecondaryDriver(driver) { return utils.types.instanceOf(driver, 'NightwatchAPI') || spec.isSecondaryDriver(driver); } exports.isSecondaryDriver = isSecondaryDriver; function isSecondaryElement(element) { return ((utils.types.has(element, 'value') && spec.isElement(element.value)) || utils.types.has(element, 'webElement') || utils.types.instanceOf(element, 'WebElement')); } exports.isSecondaryElement = isSecondaryElement; function isSelector(selector) { if (!selector) return false; return (spec.isSelector(selector) || utils.types.isString(selector) || (utils.types.has(selector, 'selector') && utils.types.isString(selector.selector)) || isByHashSelector(selector) || utils.types.isFunction(selector) || utils.types.instanceOf(selector, 'RelativeBy')); } exports.isSelector = isSelector; function toDriver(driver) { var _a, _b, _c, _d; if (spec.isDriver(driver)) return driver; if (spec.isSecondaryDriver(driver)) return spec.toDriver(driver); const selenium = driver.options.selenium; const webdriver = driver.options.webdriver; const ssl = (_a = selenium === null || selenium === void 0 ? void 0 : selenium.ssl) !== null && _a !== void 0 ? _a : webdriver === null || webdriver === void 0 ? void 0 : webdriver.ssl; const hostname = (_b = selenium === null || selenium === void 0 ? void 0 : selenium.host) !== null && _b !== void 0 ? _b : webdriver === null || webdriver === void 0 ? void 0 : webdriver.host; const port = (_c = selenium === null || selenium === void 0 ? void 0 : selenium.port) !== null && _c !== void 0 ? _c : webdriver === null || webdriver === void 0 ? void 0 : webdriver.port; const path = (_d = selenium === null || selenium === void 0 ? void 0 : selenium.default_path_prefix) !== null && _d !== void 0 ? _d : webdriver === null || webdriver === void 0 ? void 0 : webdriver.default_path_prefix; return spec.toDriver({ sessionId: driver.sessionId, serverUrl: `http${ssl ? 's' : ''}://${hostname !== null && hostname !== void 0 ? hostname : 'localhost'}${port ? `:${port}` : ''}${path}`, capabilities: driver.capabilities, original: driver, }); } exports.toDriver = toDriver; function toElement(element) { if (utils.types.has(element, 'value')) { return element.value; } else if (utils.types.instanceOf(element, 'WebElement')) { return element.getId().then(elementId => spec.toElement({ elementId })); } return element; } exports.toElement = toElement; function toSelector(selector) { if (utils.types.isString(selector)) { return { locateStrategy: isXpathSelector(selector) ? 'xpath' : 'css selector', selector }; } else if (utils.types.has(selector, 'selector')) { if (!utils.types.isString(selector.selector)) return selector.selector; if (!utils.types.has(selector, 'type')) { return { locateStrategy: isXpathSelector(selector.selector) ? 'xpath' : 'css selector', selector: selector.selector, }; } if (selector.type === 'css') return { locateStrategy: 'css selector', selector: selector.selector }; else return { locateStrategy: selector.type, selector: selector.selector }; } return selector; } exports.toSelector = toSelector; function toSimpleCommonSelector(selector) { if (utils.types.instanceOf(selector, 'RelativeBy') || utils.types.isFunction(selector)) { return null; } else if (utils.types.isString(selector)) { return { selector }; } else if (isByHashSelector(selector)) { const [[how, what]] = Object.entries(selector); if (how === 'js') return null; const Selenium = require('selenium-webdriver'); selector = Selenium.By[how](what); } if (utils.types.has(selector, ['using', 'value'])) { selector = { locateStrategy: selector.using, selector: selector.value }; } if (utils.types.has(selector, 'selector') && selector.locateStrategy) { return { type: selector.locateStrategy === 'css selector' ? 'css' : selector.locateStrategy, selector: selector.selector, }; } return selector; } exports.toSimpleCommonSelector = toSimpleCommonSelector; async function findElement(driver, selector, parent) { if (utils.types.has(selector, 'selector') && selector.locateStrategy && !selector.index) { return spec.findElement(driver, { using: selector.locateStrategy, value: selector.selector }, parent); } try { return await driver.original.findElement(selector); } catch { return null; } } exports.findElement = findElement; async function findElements(driver, selector, parent) { if (utils.types.has(selector, 'selector') && selector.locateStrategy && !selector.index) { return spec.findElements(driver, { using: selector.locateStrategy, value: selector.selector }, parent); } try { return await driver.original.findElements(selector); } catch { return []; } } exports.findElements = findElements; const browserOptionsNames = { chrome: 'goog:chromeOptions', firefox: 'moz:firefoxOptions', }; async function build(env) { var _a; const Nightwatch = require('nightwatch'); const parseEnv = require('@applitools/test-utils/src/parse-env'); const { browser = '', capabilities, url, configurable = true, args = [], headless, logLevel = 'silent', } = parseEnv({ ...env, legacy: (_a = env.legacy) !== null && _a !== void 0 ? _a : process.env.APPLITOOLS_FRAMEWORK_MAJOR_VERSION === '1' }); const options = { capabilities: { browserName: browser, ...capabilities }, webdriver: { host: url.hostname, port: url.port || (url.protocol.startsWith('https') ? 443 : undefined), default_path_prefix: url.pathname, check_process_delay: 100, max_status_poll_tries: 10, status_poll_interval: 200, process_create_timeout: 120000, timeout_options: { timeout: 2147483647 /* 32 bit positive int */, retry_attempts: 0 }, start_session: true, start_process: false, }, output: logLevel !== 'silent', config: null, useAsync: true, }; if (configurable) { const browserOptionsName = browserOptionsNames[browser || options.capabilities.browserName]; if (browserOptionsName) { const browserOptions = options.capabilities[browserOptionsName] || {}; browserOptions.args = [...(browserOptions.args || []), ...args]; if (headless) browserOptions.args.push('headless'); if (browser === 'firefox') { options.capabilities.alwaysMatch = { [browserOptionsName]: browserOptions }; } else { options.capabilities[browserOptionsName] = browserOptions; } // if (browser !== 'firefox' && !browserOptions.mobileEmulation) browserOptions.w3c = false } } if (options.capabilities.browserName === '') options.capabilities.browserName = null; if (options.capabilities.browserName !== 'firefox') options.selenium = options.webdriver; const driver = await Nightwatch.createClient(options).launchBrowser(); return [driver, () => driver.end()]; } exports.build = build;