appium-chromedriver 5.2.4 → 5.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -0
- package/build/index.js +1 -6
- package/build/lib/chromedriver.js +5 -138
- package/build/lib/chromedriver.js.map +1 -1
- package/build/lib/install.js +1 -13
- package/build/lib/install.js.map +1 -1
- package/build/lib/protocol-helpers.js +1 -10
- package/build/lib/protocol-helpers.js.map +1 -1
- package/build/lib/storage-client.js +1 -85
- package/build/lib/storage-client.js.map +1 -1
- package/build/lib/utils.js +1 -37
- package/build/lib/utils.js.map +1 -1
- package/config/mapping.json +1 -0
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chromedriver.js","names":["NEW_CD_VERSION_FORMAT_MAJOR_VERSION","DEFAULT_HOST","MIN_CD_VERSION_WITH_W3C_SUPPORT","DEFAULT_PORT","CHROME_BUNDLE_ID","WEBVIEW_SHELL_BUNDLE_ID","WEBVIEW_BUNDLE_IDS","VERSION_PATTERN","CD_VERSION_TIMEOUT","Chromedriver","events","EventEmitter","constructor","args","host","port","useSystemExecutable","executable","executableDir","getChromedriverDir","bundleId","mappingPath","cmdArgs","adb","verbose","logPath","disableBuildCheck","details","isAutodownloadEnabled","_log","logger","getLogger","generateLogPrefix","proxyHost","proxyPort","proc","chromedriver","executableVerified","state","STATE_STOPPED","jwproxy","JWProxy","server","log","storageClient","ChromedriverStorageClient","chromedriverDir","capabilities","desiredProtocol","PROTOCOLS","MJSONWP","getDriversMapping","mapping","_","cloneDeep","CHROMEDRIVER_CHROME_MAPPING","debug","fs","exists","warn","info","JSON","parse","readFile","err","message","cdVersion","chromeVersion","toPairs","coercedVersion","semver","coerce","version","getChromedrivers","executables","glob","cwd","strict","nodir","absolute","util","pluralize","length","cds","asyncmap","logError","stdout","stderr","errMsg","path","basename","exec","timeout","includes","match","minChromeVersion","major","minor","filter","cd","sort","a","b","compareVersions","isEmpty","getChromeVersion","Browser","versionMatch","apiLevel","getApiLevel","updateDriversMapping","newMapping","shouldUpdateStaticMapping","writeFile","stringify","e","Object","assign","getCompatibleChromedriver","getChromedriverBinaryPath","values","didStorageSync","syncChromedrivers","retrievedMapping","retrieveMapping","driverKeys","syncDrivers","minBrowserVersion","synchronizedDriversMapping","reduce","acc","x","missingVersions","coercedVer","size","errorAndThrow","matchingDrivers","minChromeVersionS","gte","CD_CDN","stack","autodownloadSuggestion","Error","binPath","initChromedriverPath","syncProtocol","W3C","chromeOptions","getCapValue","w3c","toW3cCapNames","start","caps","emitStartingState","loggingPrefs","browser","changeState","STATE_STARTING","adbPort","push","isArray","startDetector","startsWith","processIsAlive","webviewVersion","killAll","SubProcess","on","out","line","trim","split","error","code","signal","STATE_STOPPING","STATE_RESTARTING","msg","join","waitForOnline","startSession","emit","EVENT_ERROR","stop","versionsSupportedByDriver","sessionId","STATE_ONLINE","restart","chromedriverStopped","retryInterval","getStatus","command","sessionCaps","alwaysMatch","desiredCapabilities","prefix","emitStates","runSafeStep","f","EVENT_CHANGED","sendCommand","url","method","body","proxyReq","req","res","proxyReqRes","cmd","system","isWindows","B","promisify","cp","udidIndex","defaultArgs","findIndex","item","udid","conn","getForwardList","params","removePortForward","replace","hasWorkingWebview"],"sources":["../../lib/chromedriver.js"],"sourcesContent":["// transpile:main\n\nimport events from 'events';\nimport { JWProxy, PROTOCOLS } from 'appium/driver';\nimport cp from 'child_process';\nimport { system, fs, logger, util } from 'appium/support';\nimport { retryInterval, asyncmap } from 'asyncbox';\nimport { SubProcess, exec } from 'teen_process';\nimport B from 'bluebird';\nimport {\n getChromeVersion, getChromedriverDir, CHROMEDRIVER_CHROME_MAPPING,\n getChromedriverBinaryPath, CD_CDN, generateLogPrefix\n} from './utils';\nimport semver from 'semver';\nimport _ from 'lodash';\nimport path from 'path';\nimport { compareVersions } from 'compare-versions';\nimport ChromedriverStorageClient from './storage-client';\nimport { toW3cCapNames, getCapValue } from './protocol-helpers';\n\nconst NEW_CD_VERSION_FORMAT_MAJOR_VERSION = 73;\nconst DEFAULT_HOST = '127.0.0.1';\nconst MIN_CD_VERSION_WITH_W3C_SUPPORT = 75;\nconst DEFAULT_PORT = 9515;\nconst CHROME_BUNDLE_ID = 'com.android.chrome';\nconst WEBVIEW_SHELL_BUNDLE_ID = 'org.chromium.webview_shell';\nconst WEBVIEW_BUNDLE_IDS = [\n 'com.google.android.webview',\n 'com.android.webview',\n];\nconst VERSION_PATTERN = /([\\d.]+)/;\n\nconst CD_VERSION_TIMEOUT = 5000;\n\nclass Chromedriver extends events.EventEmitter {\n constructor (args = {}) {\n super();\n\n const {\n host = DEFAULT_HOST,\n port = DEFAULT_PORT,\n useSystemExecutable = false,\n executable,\n executableDir = getChromedriverDir(),\n bundleId,\n mappingPath,\n cmdArgs,\n adb,\n verbose,\n logPath,\n disableBuildCheck,\n details,\n isAutodownloadEnabled = false,\n } = args;\n this._log = logger.getLogger(generateLogPrefix(this));\n\n this.proxyHost = host;\n this.proxyPort = port;\n this.adb = adb;\n this.cmdArgs = cmdArgs;\n this.proc = null;\n this.useSystemExecutable = useSystemExecutable;\n this.chromedriver = executable;\n this.executableDir = executableDir;\n this.mappingPath = mappingPath;\n this.bundleId = bundleId;\n this.executableVerified = false;\n this.state = Chromedriver.STATE_STOPPED;\n this.jwproxy = new JWProxy({\n server: this.proxyHost,\n port: this.proxyPort,\n log: this._log,\n });\n this.verbose = verbose;\n this.logPath = logPath;\n this.disableBuildCheck = !!disableBuildCheck;\n this.storageClient = isAutodownloadEnabled\n ? new ChromedriverStorageClient({ chromedriverDir: this.executableDir })\n : null;\n this.details = details;\n this.capabilities = {};\n this.desiredProtocol = PROTOCOLS.MJSONWP;\n }\n\n get log () {\n return this._log;\n }\n\n async getDriversMapping () {\n let mapping = _.cloneDeep(CHROMEDRIVER_CHROME_MAPPING);\n if (this.mappingPath) {\n this.log.debug(`Attempting to use Chromedriver->Chrome mapping from '${this.mappingPath}'`);\n if (!await fs.exists(this.mappingPath)) {\n this.log.warn(`No file found at '${this.mappingPath}'`);\n this.log.info('Defaulting to the static Chromedriver->Chrome mapping');\n } else {\n try {\n mapping = JSON.parse(await fs.readFile(this.mappingPath, 'utf8'));\n } catch (err) {\n this.log.warn(`Error parsing mapping from '${this.mappingPath}': ${err.message}`);\n this.log.info('Defaulting to the static Chromedriver->Chrome mapping');\n }\n }\n } else {\n this.log.debug('Using the static Chromedriver->Chrome mapping');\n }\n\n // make sure that the values for minimum chrome version are semver compliant\n for (const [cdVersion, chromeVersion] of _.toPairs(mapping)) {\n const coercedVersion = semver.coerce(chromeVersion);\n if (coercedVersion) {\n mapping[cdVersion] = coercedVersion.version;\n } else {\n this.log.info(`'${chromeVersion}' is not a valid version number. Skipping it`);\n }\n }\n return mapping;\n }\n\n async getChromedrivers (mapping) {\n // go through the versions available\n const executables = await fs.glob('*', {\n cwd: this.executableDir,\n strict: false,\n nodir: true,\n absolute: true,\n });\n this.log.debug(`Found ${util.pluralize('executable', executables.length, true)} ` +\n `in '${this.executableDir}'`);\n const cds = (await asyncmap(executables, async (executable) => {\n const logError = ({message, stdout = null, stderr = null}) => {\n let errMsg = `Cannot retrieve version number from '${path.basename(executable)}' Chromedriver binary. ` +\n `Make sure it returns a valid version string in response to '--version' command line argument. ${message}`;\n if (stdout) {\n errMsg += `\\nStdout: ${stdout}`;\n }\n if (stderr) {\n errMsg += `\\nStderr: ${stderr}`;\n }\n this.log.warn(errMsg);\n return null;\n };\n\n let stdout;\n let stderr;\n try {\n ({stdout, stderr} = await exec(executable, ['--version'], {\n timeout: CD_VERSION_TIMEOUT,\n }));\n } catch (err) {\n if (!(err.message || '').includes('timed out') && !(err.stdout || '').includes('Starting ChromeDriver')) {\n return logError(err);\n }\n\n // if this has timed out, it has actually started Chromedriver,\n // in which case there will also be the version string in the output\n stdout = err.stdout;\n }\n\n const match = /ChromeDriver\\s+\\(?v?([\\d.]+)\\)?/i.exec(stdout); // https://regex101.com/r/zpj5wA/1\n if (!match) {\n return logError({message: 'Cannot parse the version string', stdout, stderr});\n }\n let version = match[1];\n let minChromeVersion = mapping[version];\n const coercedVersion = semver.coerce(version);\n if (coercedVersion) {\n // before 2019-03-06 versions were of the form major.minor\n if (coercedVersion.major < NEW_CD_VERSION_FORMAT_MAJOR_VERSION) {\n version = `${coercedVersion.major}.${coercedVersion.minor}`;\n minChromeVersion = mapping[version];\n }\n if (!minChromeVersion && coercedVersion.major >= NEW_CD_VERSION_FORMAT_MAJOR_VERSION) {\n // Assume the major Chrome version is the same as the corresponding driver major version\n minChromeVersion = `${coercedVersion.major}`;\n }\n }\n return {\n executable,\n version,\n minChromeVersion,\n };\n }))\n .filter((cd) => !!cd)\n .sort((a, b) => compareVersions(b.version, a.version));\n if (_.isEmpty(cds)) {\n this.log.info(`No Chromedrivers were found in '${this.executableDir}'`);\n return cds;\n }\n this.log.debug(`The following Chromedriver executables were found:`);\n for (const cd of cds) {\n this.log.debug(` '${cd.executable}' (version '${cd.version}', minimum Chrome version '${cd.minChromeVersion ? cd.minChromeVersion : 'Unknown'}')`);\n }\n return cds;\n }\n\n async getChromeVersion () {\n // Try to retrieve the version from `details` property if it is set\n // The `info` item must contain the output of /json/version CDP command\n // where `Browser` field looks like `Chrome/72.0.3601.0``\n if (this.details?.info) {\n this.log.debug(`Browser version in the supplied details: ${this.details?.info?.Browser}`);\n }\n const versionMatch = VERSION_PATTERN.exec(this.details?.info?.Browser);\n if (versionMatch) {\n const coercedVersion = semver.coerce(versionMatch[1]);\n if (coercedVersion) {\n return coercedVersion;\n }\n }\n\n let chromeVersion;\n\n // in case of WebView Browser Tester, simply try to find the underlying webview\n if (this.bundleId === WEBVIEW_SHELL_BUNDLE_ID) {\n for (const bundleId of WEBVIEW_BUNDLE_IDS) {\n chromeVersion = await getChromeVersion(this.adb, bundleId);\n if (chromeVersion) {\n this.bundleId = bundleId;\n return semver.coerce(chromeVersion);\n }\n }\n return null;\n }\n\n // on Android 7-9 webviews are backed by the main Chrome, not the system webview\n if (this.adb) {\n const apiLevel = await this.adb.getApiLevel();\n if (apiLevel >= 24 && apiLevel <= 28 &&\n [WEBVIEW_SHELL_BUNDLE_ID, ...WEBVIEW_BUNDLE_IDS].includes(this.bundleId)) {\n this.bundleId = CHROME_BUNDLE_ID;\n }\n }\n\n // try out webviews when no bundle id is sent in\n if (!this.bundleId) {\n // default to the generic Chrome bundle\n this.bundleId = CHROME_BUNDLE_ID;\n\n // we have a webview of some sort, so try to find the bundle version\n for (const bundleId of WEBVIEW_BUNDLE_IDS) {\n chromeVersion = await getChromeVersion(this.adb, bundleId);\n if (chromeVersion) {\n this.bundleId = bundleId;\n break;\n }\n }\n }\n\n // if we do not have a chrome version, it must not be a webview\n if (!chromeVersion) {\n chromeVersion = await getChromeVersion(this.adb, this.bundleId);\n }\n\n // make sure it is semver, so later checks won't fail\n return chromeVersion ? semver.coerce(chromeVersion) : null;\n }\n\n async updateDriversMapping (newMapping) {\n let shouldUpdateStaticMapping = true;\n if (await fs.exists(this.mappingPath)) {\n try {\n await fs.writeFile(this.mappingPath, JSON.stringify(newMapping, null, 2), 'utf8');\n shouldUpdateStaticMapping = false;\n } catch (e) {\n this.log.warn(`Cannot store the updated chromedrivers mapping into '${this.mappingPath}'. ` +\n `This may reduce the performance of further executions. Original error: ${e.message}`);\n }\n }\n if (shouldUpdateStaticMapping) {\n Object.assign(CHROMEDRIVER_CHROME_MAPPING, newMapping);\n }\n }\n\n async getCompatibleChromedriver () {\n if (!this.adb) {\n return await getChromedriverBinaryPath();\n }\n\n const mapping = await this.getDriversMapping();\n if (!_.isEmpty(mapping)) {\n this.log.debug(`The most recent known Chrome version: ${_.values(mapping)[0]}`);\n }\n\n let didStorageSync = false;\n const syncChromedrivers = async (chromeVersion) => {\n didStorageSync = true;\n const retrievedMapping = await this.storageClient.retrieveMapping();\n this.log.debug('Got chromedrivers mapping from the storage: ' +\n JSON.stringify(retrievedMapping, null, 2));\n const driverKeys = await this.storageClient.syncDrivers({\n minBrowserVersion: chromeVersion.major,\n });\n if (_.isEmpty(driverKeys)) {\n return false;\n }\n const synchronizedDriversMapping = driverKeys.reduce((acc, x) => {\n const {version, minBrowserVersion} = retrievedMapping[x];\n acc[version] = minBrowserVersion;\n return acc;\n }, {});\n Object.assign(mapping, synchronizedDriversMapping);\n await this.updateDriversMapping(mapping);\n return true;\n };\n\n do {\n const cds = await this.getChromedrivers(mapping);\n\n const missingVersions = {};\n for (const {version, minChromeVersion} of cds) {\n if (!minChromeVersion || mapping[version]) {\n continue;\n }\n const coercedVer = semver.coerce(version);\n if (!coercedVer || coercedVer.major < NEW_CD_VERSION_FORMAT_MAJOR_VERSION) {\n continue;\n }\n\n missingVersions[version] = minChromeVersion;\n }\n if (!_.isEmpty(missingVersions)) {\n this.log.info(`Found ${util.pluralize('Chromedriver', _.size(missingVersions), true)}, ` +\n `which ${_.size(missingVersions) === 1 ? 'is' : 'are'} missing in the list of known versions: ` +\n JSON.stringify(missingVersions));\n await this.updateDriversMapping(Object.assign(mapping, missingVersions));\n }\n\n if (this.disableBuildCheck) {\n if (_.isEmpty(cds)) {\n this.log.errorAndThrow(`There must be at least one Chromedriver executable available for use if ` +\n `'chromedriverDisableBuildCheck' capability is set to 'true'`);\n }\n const {version, executable} = cds[0];\n this.log.warn(`Chrome build check disabled. Using most recent Chromedriver version (${version}, at '${executable}')`);\n this.log.warn(`If this is wrong, set 'chromedriverDisableBuildCheck' capability to 'false'`);\n return executable;\n }\n\n const chromeVersion = await this.getChromeVersion();\n if (!chromeVersion) {\n // unable to get the chrome version\n if (_.isEmpty(cds)) {\n this.log.errorAndThrow(`There must be at least one Chromedriver executable available for use if ` +\n `the current Chrome version cannot be determined`);\n }\n const {version, executable} = cds[0];\n this.log.warn(`Unable to discover Chrome version. Using Chromedriver ${version} at '${executable}'`);\n return executable;\n }\n this.log.debug(`Found Chrome bundle '${this.bundleId}' version '${chromeVersion}'`);\n\n const matchingDrivers = cds.filter(({minChromeVersion}) => {\n const minChromeVersionS = minChromeVersion && semver.coerce(minChromeVersion);\n if (!minChromeVersionS) {\n return false;\n }\n\n return chromeVersion.major > NEW_CD_VERSION_FORMAT_MAJOR_VERSION\n ? minChromeVersionS.major === chromeVersion.major\n : semver.gte(chromeVersion, minChromeVersionS);\n });\n if (_.isEmpty(matchingDrivers)) {\n if (this.storageClient && !didStorageSync) {\n try {\n if (await syncChromedrivers(chromeVersion)) {\n continue;\n }\n } catch (e) {\n this.log.warn(`Cannot synchronize local chromedrivers with the remote storage at ${CD_CDN}: ` +\n e.message);\n this.log.debug(e.stack);\n }\n }\n const autodownloadSuggestion =\n 'You could also try to enable automated chromedrivers download as ' +\n 'a possible workaround.';\n throw new Error(`No Chromedriver found that can automate Chrome '${chromeVersion}'.` +\n (this.storageClient ? '' : ` ${autodownloadSuggestion}`));\n }\n\n const binPath = matchingDrivers[0].executable;\n this.log.debug(`Found ${util.pluralize('executable', matchingDrivers.length, true)} ` +\n `capable of automating Chrome '${chromeVersion}'.\\nChoosing the most recent, '${binPath}'.`);\n this.log.debug('If a specific version is required, specify it with the `chromedriverExecutable`' +\n 'desired capability.');\n return binPath;\n // eslint-disable-next-line no-constant-condition\n } while (true);\n }\n\n async initChromedriverPath () {\n if (this.executableVerified) return; //eslint-disable-line curly\n\n // the executable might be set (if passed in)\n // or we might want to use the basic one installed with this driver\n // or we want to figure out the best one\n if (!this.chromedriver) {\n this.chromedriver = this.useSystemExecutable\n ? await getChromedriverBinaryPath()\n : await this.getCompatibleChromedriver();\n }\n\n if (!await fs.exists(this.chromedriver)) {\n throw new Error(`Trying to use a chromedriver binary at the path ` +\n `${this.chromedriver}, but it doesn't exist!`);\n }\n this.executableVerified = true;\n this.log.info(`Set chromedriver binary as: ${this.chromedriver}`);\n }\n\n syncProtocol (cdVersion = null) {\n const coercedVersion = semver.coerce(cdVersion);\n if (!coercedVersion || coercedVersion.major < MIN_CD_VERSION_WITH_W3C_SUPPORT) {\n this.log.debug(`Chromedriver v. ${cdVersion} does not fully support ${PROTOCOLS.W3C} protocol. ` +\n `Defaulting to ${PROTOCOLS.MJSONWP}`);\n return;\n }\n const chromeOptions = getCapValue(this.capabilities, 'chromeOptions', {});\n if (chromeOptions.w3c === false) {\n this.log.info(`Chromedriver v. ${cdVersion} supports ${PROTOCOLS.W3C} protocol, ` +\n `but ${PROTOCOLS.MJSONWP} one has been explicitly requested`);\n return;\n }\n this.desiredProtocol = PROTOCOLS.W3C;\n // given caps might not be properly prefixed\n // so we try to fix them in order to properly init\n // the new W3C session\n this.capabilities = toW3cCapNames(this.capabilities);\n }\n\n async start (caps, emitStartingState = true) {\n this.capabilities = _.cloneDeep(caps);\n\n // set the logging preferences to ALL the console logs\n this.capabilities.loggingPrefs = _.cloneDeep(getCapValue(caps, 'loggingPrefs', {}));\n if (_.isEmpty(this.capabilities.loggingPrefs.browser)) {\n this.capabilities.loggingPrefs.browser = 'ALL';\n }\n\n if (emitStartingState) {\n this.changeState(Chromedriver.STATE_STARTING);\n }\n\n const args = [`--port=${this.proxyPort}`];\n if (this.adb && this.adb.adbPort) {\n args.push(`--adb-port=${this.adb.adbPort}`);\n }\n if (_.isArray(this.cmdArgs)) {\n args.push(...this.cmdArgs);\n }\n if (this.logPath) {\n args.push(`--log-path=${this.logPath}`);\n }\n if (this.disableBuildCheck) {\n args.push('--disable-build-check');\n }\n args.push('--verbose');\n // what are the process stdout/stderr conditions wherein we know that\n // the process has started to our satisfaction?\n const startDetector = (stdout) => stdout.startsWith('Starting ');\n\n let processIsAlive = false;\n let webviewVersion;\n try {\n await this.initChromedriverPath();\n await this.killAll();\n\n // set up our subprocess object\n this.proc = new SubProcess(this.chromedriver, args);\n processIsAlive = true;\n\n // handle log output\n this.proc.on('output', (stdout, stderr) => {\n // if the cd output is not printed, find the chrome version and print\n // will get a response like\n // DevTools response: {\n // \"Android-Package\": \"io.appium.sampleapp\",\n // \"Browser\": \"Chrome/55.0.2883.91\",\n // \"Protocol-Version\": \"1.2\",\n // \"User-Agent\": \"...\",\n // \"WebKit-Version\": \"537.36\"\n // }\n const out = stdout + stderr;\n let match = /\"Browser\": \"(.*)\"/.exec(out);\n if (match) {\n webviewVersion = match[1];\n this.log.debug(`Webview version: '${webviewVersion}'`);\n }\n\n // also print chromedriver version to logs\n // will output something like\n // Starting ChromeDriver 2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2) on port 9515\n match = /Starting ChromeDriver ([.\\d]+)/.exec(out);\n if (match) {\n this.log.debug(`Chromedriver version: '${match[1]}'`);\n this.syncProtocol(match[1]);\n }\n\n // give the output if it is requested\n if (this.verbose) {\n for (let line of (stdout || '').trim().split('\\n')) {\n if (!line.trim().length) continue; // eslint-disable-line curly\n this.log.debug(`[STDOUT] ${line}`);\n }\n for (let line of (stderr || '').trim().split('\\n')) {\n if (!line.trim().length) continue; // eslint-disable-line curly\n this.log.error(`[STDERR] ${line}`);\n }\n }\n });\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n if (this.state !== Chromedriver.STATE_STOPPED &&\n this.state !== Chromedriver.STATE_STOPPING &&\n this.state !== Chromedriver.STATE_RESTARTING) {\n const msg = `Chromedriver exited unexpectedly with code ${code}, signal ${signal}`;\n this.log.error(msg);\n this.changeState(Chromedriver.STATE_STOPPED);\n }\n });\n this.log.info(`Spawning chromedriver with: ${this.chromedriver} ${args.join(' ')}`);\n // start subproc and wait for startDetector\n await this.proc.start(startDetector);\n await this.waitForOnline();\n await this.startSession();\n } catch (e) {\n this.log.debug(e);\n this.emit(Chromedriver.EVENT_ERROR, e);\n // just because we had an error doesn't mean the chromedriver process\n // finished; we should clean up if necessary\n if (processIsAlive) {\n await this.proc.stop();\n }\n\n let message = '';\n // often the user's Chrome version is not supported by the version of Chromedriver\n if (e.message.includes('Chrome version must be')) {\n message += 'Unable to automate Chrome version because it is not supported by this version of Chromedriver.\\n';\n if (webviewVersion) {\n message += `Chrome version on the device: ${webviewVersion}\\n`;\n }\n const versionsSupportedByDriver = /Chrome version must be (.+)/.exec(e.message)?.[1] || '';\n if (versionsSupportedByDriver) {\n message += `Chromedriver supports Chrome version(s): ${versionsSupportedByDriver}\\n`;\n }\n message += 'Check the driver tutorial for troubleshooting.\\n';\n }\n\n message += e.message;\n this.log.errorAndThrow(message);\n }\n }\n\n sessionId () {\n return this.state === Chromedriver.STATE_ONLINE ? this.jwproxy.sessionId : null;\n }\n\n async restart () {\n this.log.info('Restarting chromedriver');\n if (this.state !== Chromedriver.STATE_ONLINE) {\n throw new Error(\"Can't restart when we're not online\");\n }\n this.changeState(Chromedriver.STATE_RESTARTING);\n await this.stop(false);\n await this.start(this.capabilities, false);\n }\n\n async waitForOnline () {\n // we need to make sure that CD hasn't crashed\n let chromedriverStopped = false;\n await retryInterval(20, 200, async () => {\n if (this.state === Chromedriver.STATE_STOPPED) {\n // we are either stopped or stopping, so something went wrong\n chromedriverStopped = true;\n return;\n }\n await this.getStatus();\n });\n if (chromedriverStopped) {\n throw new Error('ChromeDriver crashed during startup.');\n }\n }\n\n async getStatus () {\n return await this.jwproxy.command('/status', 'GET');\n }\n\n async startSession () {\n const sessionCaps = this.desiredProtocol === PROTOCOLS.W3C\n ? {capabilities: {alwaysMatch: this.capabilities}}\n : {desiredCapabilities: this.capabilities};\n this.log.info(`Starting ${this.desiredProtocol} Chromedriver session with capabilities: ` +\n JSON.stringify(sessionCaps, null, 2));\n await this.jwproxy.command('/session', 'POST', sessionCaps);\n this.log.prefix = generateLogPrefix(this, this.jwproxy.sessionId);\n this.changeState(Chromedriver.STATE_ONLINE);\n }\n\n async stop (emitStates = true) {\n if (emitStates) {\n this.changeState(Chromedriver.STATE_STOPPING);\n }\n const runSafeStep = async (f) => {\n try {\n return await f();\n } catch (e) {\n this.log.warn(e.message);\n this.log.debug(e.stack);\n }\n };\n await runSafeStep(() => this.jwproxy.command('', 'DELETE'));\n await runSafeStep(() => this.proc.stop('SIGTERM', 20000));\n this.log.prefix = generateLogPrefix(this);\n if (emitStates) {\n this.changeState(Chromedriver.STATE_STOPPED);\n }\n }\n\n changeState (state) {\n this.state = state;\n this.log.debug(`Changed state to '${state}'`);\n this.emit(Chromedriver.EVENT_CHANGED, {state});\n }\n\n async sendCommand (url, method, body) {\n return await this.jwproxy.command(url, method, body);\n }\n\n async proxyReq (req, res) {\n return await this.jwproxy.proxyReqRes(req, res);\n }\n\n async killAll () {\n let cmd = system.isWindows()\n ? `wmic process where \"commandline like '%chromedriver.exe%--port=${this.proxyPort}%'\" delete`\n : `pkill -15 -f \"${this.chromedriver}.*--port=${this.proxyPort}\"`;\n this.log.debug(`Killing any old chromedrivers, running: ${cmd}`);\n try {\n await (B.promisify(cp.exec))(cmd);\n this.log.debug('Successfully cleaned up old chromedrivers');\n } catch (err) {\n this.log.warn('No old chromedrivers seem to exist');\n }\n\n if (this.adb) {\n const udidIndex = this.adb.executable.defaultArgs.findIndex((item) => item === '-s');\n const udid = udidIndex > -1 ? this.adb.executable.defaultArgs[udidIndex + 1] : null;\n\n if (udid) {\n this.log.debug(`Cleaning this device's adb forwarded port socket connections: ${udid}`);\n } else {\n this.log.debug(`Cleaning any old adb forwarded port socket connections`);\n }\n\n try {\n for (let conn of await this.adb.getForwardList()) {\n // chromedriver will ask ADB to forward a port like \"deviceId tcp:port localabstract:webview_devtools_remote_port\"\n if (!(conn.includes('webview_devtools') && (!udid || conn.includes(udid)))) {\n continue;\n }\n\n let params = conn.split(/\\s+/);\n if (params.length > 1) {\n await this.adb.removePortForward(params[1].replace(/[\\D]*/, ''));\n }\n }\n } catch (err) {\n this.log.warn(`Unable to clean forwarded ports. Error: '${err.message}'. Continuing.`);\n }\n }\n }\n\n async hasWorkingWebview () {\n // sometimes chromedriver stops automating webviews. this method runs a\n // simple command to determine our state, and responds accordingly\n try {\n await this.jwproxy.command('/url', 'GET');\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nChromedriver.EVENT_ERROR = 'chromedriver_error';\nChromedriver.EVENT_CHANGED = 'stateChanged';\nChromedriver.STATE_STOPPED = 'stopped';\nChromedriver.STATE_STARTING = 'starting';\nChromedriver.STATE_ONLINE = 'online';\nChromedriver.STATE_STOPPING = 'stopping';\nChromedriver.STATE_RESTARTING = 'restarting';\n\nexport { Chromedriver };\nexport default Chromedriver;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chromedriver.js","names":["NEW_CD_VERSION_FORMAT_MAJOR_VERSION","DEFAULT_HOST","MIN_CD_VERSION_WITH_W3C_SUPPORT","DEFAULT_PORT","CHROME_BUNDLE_ID","WEBVIEW_SHELL_BUNDLE_ID","WEBVIEW_BUNDLE_IDS","VERSION_PATTERN","CD_VERSION_TIMEOUT","Chromedriver","events","EventEmitter","constructor","args","host","port","useSystemExecutable","executable","executableDir","getChromedriverDir","bundleId","mappingPath","cmdArgs","adb","verbose","logPath","disableBuildCheck","details","isAutodownloadEnabled","_log","logger","getLogger","generateLogPrefix","proxyHost","proxyPort","proc","chromedriver","executableVerified","state","STATE_STOPPED","jwproxy","JWProxy","server","log","storageClient","ChromedriverStorageClient","chromedriverDir","capabilities","desiredProtocol","PROTOCOLS","MJSONWP","getDriversMapping","mapping","_","cloneDeep","CHROMEDRIVER_CHROME_MAPPING","debug","fs","exists","warn","info","JSON","parse","readFile","err","message","cdVersion","chromeVersion","toPairs","coercedVersion","semver","coerce","version","getChromedrivers","executables","glob","cwd","strict","nodir","absolute","util","pluralize","length","cds","asyncmap","logError","stdout","stderr","errMsg","path","basename","exec","timeout","includes","match","minChromeVersion","major","minor","filter","cd","sort","a","b","compareVersions","isEmpty","getChromeVersion","Browser","versionMatch","apiLevel","getApiLevel","updateDriversMapping","newMapping","shouldUpdateStaticMapping","writeFile","stringify","e","Object","assign","getCompatibleChromedriver","getChromedriverBinaryPath","values","didStorageSync","syncChromedrivers","retrievedMapping","retrieveMapping","driverKeys","syncDrivers","minBrowserVersion","synchronizedDriversMapping","reduce","acc","x","missingVersions","coercedVer","size","errorAndThrow","matchingDrivers","minChromeVersionS","gte","CD_CDN","stack","autodownloadSuggestion","Error","binPath","initChromedriverPath","syncProtocol","W3C","chromeOptions","getCapValue","w3c","toW3cCapNames","start","caps","emitStartingState","loggingPrefs","browser","changeState","STATE_STARTING","adbPort","push","isArray","startDetector","startsWith","processIsAlive","webviewVersion","killAll","SubProcess","on","out","line","trim","split","error","code","signal","STATE_STOPPING","STATE_RESTARTING","msg","join","waitForOnline","startSession","emit","EVENT_ERROR","stop","versionsSupportedByDriver","sessionId","STATE_ONLINE","restart","chromedriverStopped","retryInterval","getStatus","command","sessionCaps","alwaysMatch","desiredCapabilities","prefix","emitStates","runSafeStep","f","EVENT_CHANGED","sendCommand","url","method","body","proxyReq","req","res","proxyReqRes","cmd","system","isWindows","B","promisify","cp","udidIndex","defaultArgs","findIndex","item","udid","conn","getForwardList","params","removePortForward","replace","hasWorkingWebview"],"sources":["../../lib/chromedriver.js"],"sourcesContent":["// transpile:main\n\nimport events from 'events';\nimport { JWProxy, PROTOCOLS } from 'appium/driver';\nimport cp from 'child_process';\nimport { system, fs, logger, util } from 'appium/support';\nimport { retryInterval, asyncmap } from 'asyncbox';\nimport { SubProcess, exec } from 'teen_process';\nimport B from 'bluebird';\nimport {\n getChromeVersion, getChromedriverDir, CHROMEDRIVER_CHROME_MAPPING,\n getChromedriverBinaryPath, CD_CDN, generateLogPrefix\n} from './utils';\nimport semver from 'semver';\nimport _ from 'lodash';\nimport path from 'path';\nimport { compareVersions } from 'compare-versions';\nimport ChromedriverStorageClient from './storage-client';\nimport { toW3cCapNames, getCapValue } from './protocol-helpers';\n\nconst NEW_CD_VERSION_FORMAT_MAJOR_VERSION = 73;\nconst DEFAULT_HOST = '127.0.0.1';\nconst MIN_CD_VERSION_WITH_W3C_SUPPORT = 75;\nconst DEFAULT_PORT = 9515;\nconst CHROME_BUNDLE_ID = 'com.android.chrome';\nconst WEBVIEW_SHELL_BUNDLE_ID = 'org.chromium.webview_shell';\nconst WEBVIEW_BUNDLE_IDS = [\n 'com.google.android.webview',\n 'com.android.webview',\n];\nconst VERSION_PATTERN = /([\\d.]+)/;\n\nconst CD_VERSION_TIMEOUT = 5000;\n\nclass Chromedriver extends events.EventEmitter {\n constructor (args = {}) {\n super();\n\n const {\n host = DEFAULT_HOST,\n port = DEFAULT_PORT,\n useSystemExecutable = false,\n executable,\n executableDir = getChromedriverDir(),\n bundleId,\n mappingPath,\n cmdArgs,\n adb,\n verbose,\n logPath,\n disableBuildCheck,\n details,\n isAutodownloadEnabled = false,\n } = args;\n this._log = logger.getLogger(generateLogPrefix(this));\n\n this.proxyHost = host;\n this.proxyPort = port;\n this.adb = adb;\n this.cmdArgs = cmdArgs;\n this.proc = null;\n this.useSystemExecutable = useSystemExecutable;\n this.chromedriver = executable;\n this.executableDir = executableDir;\n this.mappingPath = mappingPath;\n this.bundleId = bundleId;\n this.executableVerified = false;\n this.state = Chromedriver.STATE_STOPPED;\n this.jwproxy = new JWProxy({\n server: this.proxyHost,\n port: this.proxyPort,\n log: this._log,\n });\n this.verbose = verbose;\n this.logPath = logPath;\n this.disableBuildCheck = !!disableBuildCheck;\n this.storageClient = isAutodownloadEnabled\n ? new ChromedriverStorageClient({ chromedriverDir: this.executableDir })\n : null;\n this.details = details;\n this.capabilities = {};\n this.desiredProtocol = PROTOCOLS.MJSONWP;\n }\n\n get log () {\n return this._log;\n }\n\n async getDriversMapping () {\n let mapping = _.cloneDeep(CHROMEDRIVER_CHROME_MAPPING);\n if (this.mappingPath) {\n this.log.debug(`Attempting to use Chromedriver->Chrome mapping from '${this.mappingPath}'`);\n if (!await fs.exists(this.mappingPath)) {\n this.log.warn(`No file found at '${this.mappingPath}'`);\n this.log.info('Defaulting to the static Chromedriver->Chrome mapping');\n } else {\n try {\n mapping = JSON.parse(await fs.readFile(this.mappingPath, 'utf8'));\n } catch (err) {\n this.log.warn(`Error parsing mapping from '${this.mappingPath}': ${err.message}`);\n this.log.info('Defaulting to the static Chromedriver->Chrome mapping');\n }\n }\n } else {\n this.log.debug('Using the static Chromedriver->Chrome mapping');\n }\n\n // make sure that the values for minimum chrome version are semver compliant\n for (const [cdVersion, chromeVersion] of _.toPairs(mapping)) {\n const coercedVersion = semver.coerce(chromeVersion);\n if (coercedVersion) {\n mapping[cdVersion] = coercedVersion.version;\n } else {\n this.log.info(`'${chromeVersion}' is not a valid version number. Skipping it`);\n }\n }\n return mapping;\n }\n\n async getChromedrivers (mapping) {\n // go through the versions available\n const executables = await fs.glob('*', {\n cwd: this.executableDir,\n strict: false,\n nodir: true,\n absolute: true,\n });\n this.log.debug(`Found ${util.pluralize('executable', executables.length, true)} ` +\n `in '${this.executableDir}'`);\n const cds = (await asyncmap(executables, async (executable) => {\n const logError = ({message, stdout = null, stderr = null}) => {\n let errMsg = `Cannot retrieve version number from '${path.basename(executable)}' Chromedriver binary. ` +\n `Make sure it returns a valid version string in response to '--version' command line argument. ${message}`;\n if (stdout) {\n errMsg += `\\nStdout: ${stdout}`;\n }\n if (stderr) {\n errMsg += `\\nStderr: ${stderr}`;\n }\n this.log.warn(errMsg);\n return null;\n };\n\n let stdout;\n let stderr;\n try {\n ({stdout, stderr} = await exec(executable, ['--version'], {\n timeout: CD_VERSION_TIMEOUT,\n }));\n } catch (err) {\n if (!(err.message || '').includes('timed out') && !(err.stdout || '').includes('Starting ChromeDriver')) {\n return logError(err);\n }\n\n // if this has timed out, it has actually started Chromedriver,\n // in which case there will also be the version string in the output\n stdout = err.stdout;\n }\n\n const match = /ChromeDriver\\s+\\(?v?([\\d.]+)\\)?/i.exec(stdout); // https://regex101.com/r/zpj5wA/1\n if (!match) {\n return logError({message: 'Cannot parse the version string', stdout, stderr});\n }\n let version = match[1];\n let minChromeVersion = mapping[version];\n const coercedVersion = semver.coerce(version);\n if (coercedVersion) {\n // before 2019-03-06 versions were of the form major.minor\n if (coercedVersion.major < NEW_CD_VERSION_FORMAT_MAJOR_VERSION) {\n version = `${coercedVersion.major}.${coercedVersion.minor}`;\n minChromeVersion = mapping[version];\n }\n if (!minChromeVersion && coercedVersion.major >= NEW_CD_VERSION_FORMAT_MAJOR_VERSION) {\n // Assume the major Chrome version is the same as the corresponding driver major version\n minChromeVersion = `${coercedVersion.major}`;\n }\n }\n return {\n executable,\n version,\n minChromeVersion,\n };\n }))\n .filter((cd) => !!cd)\n .sort((a, b) => compareVersions(b.version, a.version));\n if (_.isEmpty(cds)) {\n this.log.info(`No Chromedrivers were found in '${this.executableDir}'`);\n return cds;\n }\n this.log.debug(`The following Chromedriver executables were found:`);\n for (const cd of cds) {\n this.log.debug(` '${cd.executable}' (version '${cd.version}', minimum Chrome version '${cd.minChromeVersion ? cd.minChromeVersion : 'Unknown'}')`);\n }\n return cds;\n }\n\n async getChromeVersion () {\n // Try to retrieve the version from `details` property if it is set\n // The `info` item must contain the output of /json/version CDP command\n // where `Browser` field looks like `Chrome/72.0.3601.0``\n if (this.details?.info) {\n this.log.debug(`Browser version in the supplied details: ${this.details?.info?.Browser}`);\n }\n const versionMatch = VERSION_PATTERN.exec(this.details?.info?.Browser);\n if (versionMatch) {\n const coercedVersion = semver.coerce(versionMatch[1]);\n if (coercedVersion) {\n return coercedVersion;\n }\n }\n\n let chromeVersion;\n\n // in case of WebView Browser Tester, simply try to find the underlying webview\n if (this.bundleId === WEBVIEW_SHELL_BUNDLE_ID) {\n for (const bundleId of WEBVIEW_BUNDLE_IDS) {\n chromeVersion = await getChromeVersion(this.adb, bundleId);\n if (chromeVersion) {\n this.bundleId = bundleId;\n return semver.coerce(chromeVersion);\n }\n }\n return null;\n }\n\n // on Android 7-9 webviews are backed by the main Chrome, not the system webview\n if (this.adb) {\n const apiLevel = await this.adb.getApiLevel();\n if (apiLevel >= 24 && apiLevel <= 28 &&\n [WEBVIEW_SHELL_BUNDLE_ID, ...WEBVIEW_BUNDLE_IDS].includes(this.bundleId)) {\n this.bundleId = CHROME_BUNDLE_ID;\n }\n }\n\n // try out webviews when no bundle id is sent in\n if (!this.bundleId) {\n // default to the generic Chrome bundle\n this.bundleId = CHROME_BUNDLE_ID;\n\n // we have a webview of some sort, so try to find the bundle version\n for (const bundleId of WEBVIEW_BUNDLE_IDS) {\n chromeVersion = await getChromeVersion(this.adb, bundleId);\n if (chromeVersion) {\n this.bundleId = bundleId;\n break;\n }\n }\n }\n\n // if we do not have a chrome version, it must not be a webview\n if (!chromeVersion) {\n chromeVersion = await getChromeVersion(this.adb, this.bundleId);\n }\n\n // make sure it is semver, so later checks won't fail\n return chromeVersion ? semver.coerce(chromeVersion) : null;\n }\n\n async updateDriversMapping (newMapping) {\n let shouldUpdateStaticMapping = true;\n if (await fs.exists(this.mappingPath)) {\n try {\n await fs.writeFile(this.mappingPath, JSON.stringify(newMapping, null, 2), 'utf8');\n shouldUpdateStaticMapping = false;\n } catch (e) {\n this.log.warn(`Cannot store the updated chromedrivers mapping into '${this.mappingPath}'. ` +\n `This may reduce the performance of further executions. Original error: ${e.message}`);\n }\n }\n if (shouldUpdateStaticMapping) {\n Object.assign(CHROMEDRIVER_CHROME_MAPPING, newMapping);\n }\n }\n\n async getCompatibleChromedriver () {\n if (!this.adb) {\n return await getChromedriverBinaryPath();\n }\n\n const mapping = await this.getDriversMapping();\n if (!_.isEmpty(mapping)) {\n this.log.debug(`The most recent known Chrome version: ${_.values(mapping)[0]}`);\n }\n\n let didStorageSync = false;\n const syncChromedrivers = async (chromeVersion) => {\n didStorageSync = true;\n const retrievedMapping = await this.storageClient.retrieveMapping();\n this.log.debug('Got chromedrivers mapping from the storage: ' +\n JSON.stringify(retrievedMapping, null, 2));\n const driverKeys = await this.storageClient.syncDrivers({\n minBrowserVersion: chromeVersion.major,\n });\n if (_.isEmpty(driverKeys)) {\n return false;\n }\n const synchronizedDriversMapping = driverKeys.reduce((acc, x) => {\n const {version, minBrowserVersion} = retrievedMapping[x];\n acc[version] = minBrowserVersion;\n return acc;\n }, {});\n Object.assign(mapping, synchronizedDriversMapping);\n await this.updateDriversMapping(mapping);\n return true;\n };\n\n do {\n const cds = await this.getChromedrivers(mapping);\n\n const missingVersions = {};\n for (const {version, minChromeVersion} of cds) {\n if (!minChromeVersion || mapping[version]) {\n continue;\n }\n const coercedVer = semver.coerce(version);\n if (!coercedVer || coercedVer.major < NEW_CD_VERSION_FORMAT_MAJOR_VERSION) {\n continue;\n }\n\n missingVersions[version] = minChromeVersion;\n }\n if (!_.isEmpty(missingVersions)) {\n this.log.info(`Found ${util.pluralize('Chromedriver', _.size(missingVersions), true)}, ` +\n `which ${_.size(missingVersions) === 1 ? 'is' : 'are'} missing in the list of known versions: ` +\n JSON.stringify(missingVersions));\n await this.updateDriversMapping(Object.assign(mapping, missingVersions));\n }\n\n if (this.disableBuildCheck) {\n if (_.isEmpty(cds)) {\n this.log.errorAndThrow(`There must be at least one Chromedriver executable available for use if ` +\n `'chromedriverDisableBuildCheck' capability is set to 'true'`);\n }\n const {version, executable} = cds[0];\n this.log.warn(`Chrome build check disabled. Using most recent Chromedriver version (${version}, at '${executable}')`);\n this.log.warn(`If this is wrong, set 'chromedriverDisableBuildCheck' capability to 'false'`);\n return executable;\n }\n\n const chromeVersion = await this.getChromeVersion();\n if (!chromeVersion) {\n // unable to get the chrome version\n if (_.isEmpty(cds)) {\n this.log.errorAndThrow(`There must be at least one Chromedriver executable available for use if ` +\n `the current Chrome version cannot be determined`);\n }\n const {version, executable} = cds[0];\n this.log.warn(`Unable to discover Chrome version. Using Chromedriver ${version} at '${executable}'`);\n return executable;\n }\n this.log.debug(`Found Chrome bundle '${this.bundleId}' version '${chromeVersion}'`);\n\n const matchingDrivers = cds.filter(({minChromeVersion}) => {\n const minChromeVersionS = minChromeVersion && semver.coerce(minChromeVersion);\n if (!minChromeVersionS) {\n return false;\n }\n\n return chromeVersion.major > NEW_CD_VERSION_FORMAT_MAJOR_VERSION\n ? minChromeVersionS.major === chromeVersion.major\n : semver.gte(chromeVersion, minChromeVersionS);\n });\n if (_.isEmpty(matchingDrivers)) {\n if (this.storageClient && !didStorageSync) {\n try {\n if (await syncChromedrivers(chromeVersion)) {\n continue;\n }\n } catch (e) {\n this.log.warn(`Cannot synchronize local chromedrivers with the remote storage at ${CD_CDN}: ` +\n e.message);\n this.log.debug(e.stack);\n }\n }\n const autodownloadSuggestion =\n 'You could also try to enable automated chromedrivers download as ' +\n 'a possible workaround.';\n throw new Error(`No Chromedriver found that can automate Chrome '${chromeVersion}'.` +\n (this.storageClient ? '' : ` ${autodownloadSuggestion}`));\n }\n\n const binPath = matchingDrivers[0].executable;\n this.log.debug(`Found ${util.pluralize('executable', matchingDrivers.length, true)} ` +\n `capable of automating Chrome '${chromeVersion}'.\\nChoosing the most recent, '${binPath}'.`);\n this.log.debug('If a specific version is required, specify it with the `chromedriverExecutable`' +\n 'desired capability.');\n return binPath;\n // eslint-disable-next-line no-constant-condition\n } while (true);\n }\n\n async initChromedriverPath () {\n if (this.executableVerified) return; //eslint-disable-line curly\n\n // the executable might be set (if passed in)\n // or we might want to use the basic one installed with this driver\n // or we want to figure out the best one\n if (!this.chromedriver) {\n this.chromedriver = this.useSystemExecutable\n ? await getChromedriverBinaryPath()\n : await this.getCompatibleChromedriver();\n }\n\n if (!await fs.exists(this.chromedriver)) {\n throw new Error(`Trying to use a chromedriver binary at the path ` +\n `${this.chromedriver}, but it doesn't exist!`);\n }\n this.executableVerified = true;\n this.log.info(`Set chromedriver binary as: ${this.chromedriver}`);\n }\n\n syncProtocol (cdVersion = null) {\n const coercedVersion = semver.coerce(cdVersion);\n if (!coercedVersion || coercedVersion.major < MIN_CD_VERSION_WITH_W3C_SUPPORT) {\n this.log.debug(`Chromedriver v. ${cdVersion} does not fully support ${PROTOCOLS.W3C} protocol. ` +\n `Defaulting to ${PROTOCOLS.MJSONWP}`);\n return;\n }\n const chromeOptions = getCapValue(this.capabilities, 'chromeOptions', {});\n if (chromeOptions.w3c === false) {\n this.log.info(`Chromedriver v. ${cdVersion} supports ${PROTOCOLS.W3C} protocol, ` +\n `but ${PROTOCOLS.MJSONWP} one has been explicitly requested`);\n return;\n }\n this.desiredProtocol = PROTOCOLS.W3C;\n // given caps might not be properly prefixed\n // so we try to fix them in order to properly init\n // the new W3C session\n this.capabilities = toW3cCapNames(this.capabilities);\n }\n\n async start (caps, emitStartingState = true) {\n this.capabilities = _.cloneDeep(caps);\n\n // set the logging preferences to ALL the console logs\n this.capabilities.loggingPrefs = _.cloneDeep(getCapValue(caps, 'loggingPrefs', {}));\n if (_.isEmpty(this.capabilities.loggingPrefs.browser)) {\n this.capabilities.loggingPrefs.browser = 'ALL';\n }\n\n if (emitStartingState) {\n this.changeState(Chromedriver.STATE_STARTING);\n }\n\n const args = [`--port=${this.proxyPort}`];\n if (this.adb && this.adb.adbPort) {\n args.push(`--adb-port=${this.adb.adbPort}`);\n }\n if (_.isArray(this.cmdArgs)) {\n args.push(...this.cmdArgs);\n }\n if (this.logPath) {\n args.push(`--log-path=${this.logPath}`);\n }\n if (this.disableBuildCheck) {\n args.push('--disable-build-check');\n }\n args.push('--verbose');\n // what are the process stdout/stderr conditions wherein we know that\n // the process has started to our satisfaction?\n const startDetector = (stdout) => stdout.startsWith('Starting ');\n\n let processIsAlive = false;\n let webviewVersion;\n try {\n await this.initChromedriverPath();\n await this.killAll();\n\n // set up our subprocess object\n this.proc = new SubProcess(this.chromedriver, args);\n processIsAlive = true;\n\n // handle log output\n this.proc.on('output', (stdout, stderr) => {\n // if the cd output is not printed, find the chrome version and print\n // will get a response like\n // DevTools response: {\n // \"Android-Package\": \"io.appium.sampleapp\",\n // \"Browser\": \"Chrome/55.0.2883.91\",\n // \"Protocol-Version\": \"1.2\",\n // \"User-Agent\": \"...\",\n // \"WebKit-Version\": \"537.36\"\n // }\n const out = stdout + stderr;\n let match = /\"Browser\": \"(.*)\"/.exec(out);\n if (match) {\n webviewVersion = match[1];\n this.log.debug(`Webview version: '${webviewVersion}'`);\n }\n\n // also print chromedriver version to logs\n // will output something like\n // Starting ChromeDriver 2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2) on port 9515\n match = /Starting ChromeDriver ([.\\d]+)/.exec(out);\n if (match) {\n this.log.debug(`Chromedriver version: '${match[1]}'`);\n this.syncProtocol(match[1]);\n }\n\n // give the output if it is requested\n if (this.verbose) {\n for (let line of (stdout || '').trim().split('\\n')) {\n if (!line.trim().length) continue; // eslint-disable-line curly\n this.log.debug(`[STDOUT] ${line}`);\n }\n for (let line of (stderr || '').trim().split('\\n')) {\n if (!line.trim().length) continue; // eslint-disable-line curly\n this.log.error(`[STDERR] ${line}`);\n }\n }\n });\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n if (this.state !== Chromedriver.STATE_STOPPED &&\n this.state !== Chromedriver.STATE_STOPPING &&\n this.state !== Chromedriver.STATE_RESTARTING) {\n const msg = `Chromedriver exited unexpectedly with code ${code}, signal ${signal}`;\n this.log.error(msg);\n this.changeState(Chromedriver.STATE_STOPPED);\n }\n });\n this.log.info(`Spawning chromedriver with: ${this.chromedriver} ${args.join(' ')}`);\n // start subproc and wait for startDetector\n await this.proc.start(startDetector);\n await this.waitForOnline();\n await this.startSession();\n } catch (e) {\n this.log.debug(e);\n this.emit(Chromedriver.EVENT_ERROR, e);\n // just because we had an error doesn't mean the chromedriver process\n // finished; we should clean up if necessary\n if (processIsAlive) {\n await this.proc.stop();\n }\n\n let message = '';\n // often the user's Chrome version is not supported by the version of Chromedriver\n if (e.message.includes('Chrome version must be')) {\n message += 'Unable to automate Chrome version because it is not supported by this version of Chromedriver.\\n';\n if (webviewVersion) {\n message += `Chrome version on the device: ${webviewVersion}\\n`;\n }\n const versionsSupportedByDriver = /Chrome version must be (.+)/.exec(e.message)?.[1] || '';\n if (versionsSupportedByDriver) {\n message += `Chromedriver supports Chrome version(s): ${versionsSupportedByDriver}\\n`;\n }\n message += 'Check the driver tutorial for troubleshooting.\\n';\n }\n\n message += e.message;\n this.log.errorAndThrow(message);\n }\n }\n\n sessionId () {\n return this.state === Chromedriver.STATE_ONLINE ? this.jwproxy.sessionId : null;\n }\n\n async restart () {\n this.log.info('Restarting chromedriver');\n if (this.state !== Chromedriver.STATE_ONLINE) {\n throw new Error(\"Can't restart when we're not online\");\n }\n this.changeState(Chromedriver.STATE_RESTARTING);\n await this.stop(false);\n await this.start(this.capabilities, false);\n }\n\n async waitForOnline () {\n // we need to make sure that CD hasn't crashed\n let chromedriverStopped = false;\n await retryInterval(20, 200, async () => {\n if (this.state === Chromedriver.STATE_STOPPED) {\n // we are either stopped or stopping, so something went wrong\n chromedriverStopped = true;\n return;\n }\n await this.getStatus();\n });\n if (chromedriverStopped) {\n throw new Error('ChromeDriver crashed during startup.');\n }\n }\n\n async getStatus () {\n return await this.jwproxy.command('/status', 'GET');\n }\n\n async startSession () {\n const sessionCaps = this.desiredProtocol === PROTOCOLS.W3C\n ? {capabilities: {alwaysMatch: this.capabilities}}\n : {desiredCapabilities: this.capabilities};\n this.log.info(`Starting ${this.desiredProtocol} Chromedriver session with capabilities: ` +\n JSON.stringify(sessionCaps, null, 2));\n await this.jwproxy.command('/session', 'POST', sessionCaps);\n this.log.prefix = generateLogPrefix(this, this.jwproxy.sessionId);\n this.changeState(Chromedriver.STATE_ONLINE);\n }\n\n async stop (emitStates = true) {\n if (emitStates) {\n this.changeState(Chromedriver.STATE_STOPPING);\n }\n const runSafeStep = async (f) => {\n try {\n return await f();\n } catch (e) {\n this.log.warn(e.message);\n this.log.debug(e.stack);\n }\n };\n await runSafeStep(() => this.jwproxy.command('', 'DELETE'));\n await runSafeStep(() => this.proc.stop('SIGTERM', 20000));\n this.log.prefix = generateLogPrefix(this);\n if (emitStates) {\n this.changeState(Chromedriver.STATE_STOPPED);\n }\n }\n\n changeState (state) {\n this.state = state;\n this.log.debug(`Changed state to '${state}'`);\n this.emit(Chromedriver.EVENT_CHANGED, {state});\n }\n\n async sendCommand (url, method, body) {\n return await this.jwproxy.command(url, method, body);\n }\n\n async proxyReq (req, res) {\n return await this.jwproxy.proxyReqRes(req, res);\n }\n\n async killAll () {\n let cmd = system.isWindows()\n ? `wmic process where \"commandline like '%chromedriver.exe%--port=${this.proxyPort}%'\" delete`\n : `pkill -15 -f \"${this.chromedriver}.*--port=${this.proxyPort}\"`;\n this.log.debug(`Killing any old chromedrivers, running: ${cmd}`);\n try {\n await (B.promisify(cp.exec))(cmd);\n this.log.debug('Successfully cleaned up old chromedrivers');\n } catch (err) {\n this.log.warn('No old chromedrivers seem to exist');\n }\n\n if (this.adb) {\n const udidIndex = this.adb.executable.defaultArgs.findIndex((item) => item === '-s');\n const udid = udidIndex > -1 ? this.adb.executable.defaultArgs[udidIndex + 1] : null;\n\n if (udid) {\n this.log.debug(`Cleaning this device's adb forwarded port socket connections: ${udid}`);\n } else {\n this.log.debug(`Cleaning any old adb forwarded port socket connections`);\n }\n\n try {\n for (let conn of await this.adb.getForwardList()) {\n // chromedriver will ask ADB to forward a port like \"deviceId tcp:port localabstract:webview_devtools_remote_port\"\n if (!(conn.includes('webview_devtools') && (!udid || conn.includes(udid)))) {\n continue;\n }\n\n let params = conn.split(/\\s+/);\n if (params.length > 1) {\n await this.adb.removePortForward(params[1].replace(/[\\D]*/, ''));\n }\n }\n } catch (err) {\n this.log.warn(`Unable to clean forwarded ports. Error: '${err.message}'. Continuing.`);\n }\n }\n }\n\n async hasWorkingWebview () {\n // sometimes chromedriver stops automating webviews. this method runs a\n // simple command to determine our state, and responds accordingly\n try {\n await this.jwproxy.command('/url', 'GET');\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n\nChromedriver.EVENT_ERROR = 'chromedriver_error';\nChromedriver.EVENT_CHANGED = 'stateChanged';\nChromedriver.STATE_STOPPED = 'stopped';\nChromedriver.STATE_STARTING = 'starting';\nChromedriver.STATE_ONLINE = 'online';\nChromedriver.STATE_STOPPING = 'stopping';\nChromedriver.STATE_RESTARTING = 'restarting';\n\nexport { Chromedriver };\nexport default Chromedriver;\n"],"mappings":"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"}
|
package/build/lib/install.js
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.doInstall = doInstall;
|
|
9
8
|
exports.install = install;
|
|
10
|
-
|
|
11
9
|
require("source-map-support/register");
|
|
12
|
-
|
|
13
10
|
var _support = require("appium/support");
|
|
14
|
-
|
|
15
11
|
var _storageClient = _interopRequireDefault(require("./storage-client"));
|
|
16
|
-
|
|
17
12
|
var _utils = require("./utils");
|
|
18
|
-
|
|
19
13
|
const DOWNLOAD_TIMEOUT_MS = 15 * 1000;
|
|
20
14
|
const LATEST_VERSION = 'LATEST';
|
|
21
|
-
|
|
22
15
|
async function formatCdVersion(ver) {
|
|
23
16
|
return ver === LATEST_VERSION ? (await (0, _utils.retrieveData)(`${_utils.CD_CDN}/LATEST_RELEASE`, {
|
|
24
17
|
'user-agent': 'appium',
|
|
@@ -27,17 +20,13 @@ async function formatCdVersion(ver) {
|
|
|
27
20
|
timeout: DOWNLOAD_TIMEOUT_MS
|
|
28
21
|
})).trim() : ver;
|
|
29
22
|
}
|
|
30
|
-
|
|
31
23
|
async function prepareChromedriverDir(platformName) {
|
|
32
24
|
const chromedriverDir = (0, _utils.getChromedriverDir)(platformName);
|
|
33
|
-
|
|
34
25
|
if (!(await _support.fs.exists(chromedriverDir))) {
|
|
35
26
|
await (0, _support.mkdirp)(chromedriverDir);
|
|
36
27
|
}
|
|
37
|
-
|
|
38
28
|
return chromedriverDir;
|
|
39
29
|
}
|
|
40
|
-
|
|
41
30
|
async function install() {
|
|
42
31
|
const osInfo = await (0, _utils.getOsInfo)();
|
|
43
32
|
const client = new _storageClient.default({
|
|
@@ -48,8 +37,7 @@ async function install() {
|
|
|
48
37
|
versions: [await formatCdVersion(_utils.CD_VER)]
|
|
49
38
|
});
|
|
50
39
|
}
|
|
51
|
-
|
|
52
40
|
async function doInstall() {
|
|
53
41
|
await install();
|
|
54
42
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJET1dOTE9BRF9USU1FT1VUX01TIiwiTEFURVNUX1ZFUlNJT04iLCJmb3JtYXRDZFZlcnNpb24iLCJ2ZXIiLCJyZXRyaWV2ZURhdGEiLCJDRF9DRE4iLCJhY2NlcHQiLCJ0aW1lb3V0IiwidHJpbSIsInByZXBhcmVDaHJvbWVkcml2ZXJEaXIiLCJwbGF0Zm9ybU5hbWUiLCJjaHJvbWVkcml2ZXJEaXIiLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJmcyIsImV4aXN0cyIsIm1rZGlycCIsImluc3RhbGwiLCJvc0luZm8iLCJnZXRPc0luZm8iLCJjbGllbnQiLCJDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IiwibmFtZSIsInN5bmNEcml2ZXJzIiwidmVyc2lvbnMiLCJDRF9WRVIiLCJkb0luc3RhbGwiXSwic291cmNlcyI6WyIuLi8uLi9saWIvaW5zdGFsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgbWtkaXJwIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgZnJvbSAnLi9zdG9yYWdlLWNsaWVudCc7XG5pbXBvcnQge1xuICBDRF9DRE4sIENEX1ZFUiwgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sIGdldENocm9tZWRyaXZlckRpcixcbn0gZnJvbSAnLi91dGlscyc7XG5cblxuY29uc3QgRE9XTkxPQURfVElNRU9VVF9NUyA9IDE1ICogMTAwMDtcbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ0xBVEVTVCc7XG5cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENkVmVyc2lvbiAodmVyKSB7XG4gIHJldHVybiB2ZXIgPT09IExBVEVTVF9WRVJTSU9OXG4gICAgPyAoYXdhaXQgcmV0cmlldmVEYXRhKGAke0NEX0NETn0vTEFURVNUX1JFTEVBU0VgLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IERPV05MT0FEX1RJTUVPVVRfTVMgfSkpLnRyaW0oKVxuICAgIDogdmVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQ2hyb21lZHJpdmVyRGlyIChwbGF0Zm9ybU5hbWUpIHtcbiAgY29uc3QgY2hyb21lZHJpdmVyRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKHBsYXRmb3JtTmFtZSk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGNocm9tZWRyaXZlckRpcikpIHtcbiAgICBhd2FpdCBta2RpcnAoY2hyb21lZHJpdmVyRGlyKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyRGlyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsICgpIHtcbiAgY29uc3Qgb3NJbmZvID0gYXdhaXQgZ2V0T3NJbmZvKCk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHtcbiAgICBjaHJvbWVkcml2ZXJEaXI6IGF3YWl0IHByZXBhcmVDaHJvbWVkcml2ZXJEaXIob3NJbmZvLm5hbWUpLFxuICB9KTtcbiAgYXdhaXQgY2xpZW50LnN5bmNEcml2ZXJzKHtcbiAgICBvc0luZm8sXG4gICAgdmVyc2lvbnM6IFthd2FpdCBmb3JtYXRDZFZlcnNpb24oQ0RfVkVSKV0sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb0luc3RhbGwgKCkge1xuICBhd2FpdCBpbnN0YWxsKCk7XG59XG5cbmV4cG9ydCB7IGluc3RhbGwsIGRvSW5zdGFsbCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFLQSxNQUFNQSxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsSUFBSTtBQUNyQyxNQUFNQyxjQUFjLEdBQUcsUUFBUTtBQUUvQixlQUFlQyxlQUFlLENBQUVDLEdBQUcsRUFBRTtFQUNuQyxPQUFPQSxHQUFHLEtBQUtGLGNBQWMsR0FDekIsQ0FBQyxNQUFNLElBQUFHLG1CQUFZLEVBQUUsR0FBRUMsYUFBTyxpQkFBZ0IsRUFBRTtJQUNoRCxZQUFZLEVBQUUsUUFBUTtJQUN0QkMsTUFBTSxFQUFFO0VBQ1YsQ0FBQyxFQUFFO0lBQUVDLE9BQU8sRUFBRVA7RUFBb0IsQ0FBQyxDQUFDLEVBQUVRLElBQUksRUFBRSxHQUMxQ0wsR0FBRztBQUNUO0FBRUEsZUFBZU0sc0JBQXNCLENBQUVDLFlBQVksRUFBRTtFQUNuRCxNQUFNQyxlQUFlLEdBQUcsSUFBQUMseUJBQWtCLEVBQUNGLFlBQVksQ0FBQztFQUN4RCxJQUFJLEVBQUMsTUFBTUcsV0FBRSxDQUFDQyxNQUFNLENBQUNILGVBQWUsQ0FBQyxHQUFFO0lBQ3JDLE1BQU0sSUFBQUksZUFBTSxFQUFDSixlQUFlLENBQUM7RUFDL0I7RUFDQSxPQUFPQSxlQUFlO0FBQ3hCO0FBRUEsZUFBZUssT0FBTyxHQUFJO0VBQ3hCLE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUFDLGdCQUFTLEdBQUU7RUFDaEMsTUFBTUMsTUFBTSxHQUFHLElBQUlDLHNCQUF5QixDQUFDO0lBQzNDVCxlQUFlLEVBQUUsTUFBTUYsc0JBQXNCLENBQUNRLE1BQU0sQ0FBQ0ksSUFBSTtFQUMzRCxDQUFDLENBQUM7RUFDRixNQUFNRixNQUFNLENBQUNHLFdBQVcsQ0FBQztJQUN2QkwsTUFBTTtJQUNOTSxRQUFRLEVBQUUsQ0FBQyxNQUFNckIsZUFBZSxDQUFDc0IsYUFBTSxDQUFDO0VBQzFDLENBQUMsQ0FBQztBQUNKO0FBRUEsZUFBZUMsU0FBUyxHQUFJO0VBQzFCLE1BQU1ULE9BQU8sRUFBRTtBQUNqQiJ9
|
package/build/lib/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","names":["DOWNLOAD_TIMEOUT_MS","LATEST_VERSION","formatCdVersion","ver","retrieveData","CD_CDN","accept","timeout","trim","prepareChromedriverDir","platformName","chromedriverDir","getChromedriverDir","fs","exists","mkdirp","install","osInfo","getOsInfo","client","ChromedriverStorageClient","name","syncDrivers","versions","CD_VER","doInstall"],"sources":["../../lib/install.js"],"sourcesContent":["import { fs, mkdirp } from 'appium/support';\nimport ChromedriverStorageClient from './storage-client';\nimport {\n CD_CDN, CD_VER, retrieveData, getOsInfo, getChromedriverDir,\n} from './utils';\n\n\nconst DOWNLOAD_TIMEOUT_MS = 15 * 1000;\nconst LATEST_VERSION = 'LATEST';\n\nasync function formatCdVersion (ver) {\n return ver === LATEST_VERSION\n ? (await retrieveData(`${CD_CDN}/LATEST_RELEASE`, {\n 'user-agent': 'appium',\n accept: '*/*',\n }, { timeout: DOWNLOAD_TIMEOUT_MS })).trim()\n : ver;\n}\n\nasync function prepareChromedriverDir (platformName) {\n const chromedriverDir = getChromedriverDir(platformName);\n if (!await fs.exists(chromedriverDir)) {\n await mkdirp(chromedriverDir);\n }\n return chromedriverDir;\n}\n\nasync function install () {\n const osInfo = await getOsInfo();\n const client = new ChromedriverStorageClient({\n chromedriverDir: await prepareChromedriverDir(osInfo.name),\n });\n await client.syncDrivers({\n osInfo,\n versions: [await formatCdVersion(CD_VER)],\n });\n}\n\nasync function doInstall () {\n await install();\n}\n\nexport { install, doInstall };\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.js","names":["DOWNLOAD_TIMEOUT_MS","LATEST_VERSION","formatCdVersion","ver","retrieveData","CD_CDN","accept","timeout","trim","prepareChromedriverDir","platformName","chromedriverDir","getChromedriverDir","fs","exists","mkdirp","install","osInfo","getOsInfo","client","ChromedriverStorageClient","name","syncDrivers","versions","CD_VER","doInstall"],"sources":["../../lib/install.js"],"sourcesContent":["import { fs, mkdirp } from 'appium/support';\nimport ChromedriverStorageClient from './storage-client';\nimport {\n CD_CDN, CD_VER, retrieveData, getOsInfo, getChromedriverDir,\n} from './utils';\n\n\nconst DOWNLOAD_TIMEOUT_MS = 15 * 1000;\nconst LATEST_VERSION = 'LATEST';\n\nasync function formatCdVersion (ver) {\n return ver === LATEST_VERSION\n ? (await retrieveData(`${CD_CDN}/LATEST_RELEASE`, {\n 'user-agent': 'appium',\n accept: '*/*',\n }, { timeout: DOWNLOAD_TIMEOUT_MS })).trim()\n : ver;\n}\n\nasync function prepareChromedriverDir (platformName) {\n const chromedriverDir = getChromedriverDir(platformName);\n if (!await fs.exists(chromedriverDir)) {\n await mkdirp(chromedriverDir);\n }\n return chromedriverDir;\n}\n\nasync function install () {\n const osInfo = await getOsInfo();\n const client = new ChromedriverStorageClient({\n chromedriverDir: await prepareChromedriverDir(osInfo.name),\n });\n await client.syncDrivers({\n osInfo,\n versions: [await formatCdVersion(CD_VER)],\n });\n}\n\nasync function doInstall () {\n await install();\n}\n\nexport { install, doInstall };\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AAKA,MAAMA,mBAAmB,GAAG,EAAE,GAAG,IAAI;AACrC,MAAMC,cAAc,GAAG,QAAQ;AAE/B,eAAeC,eAAe,CAAEC,GAAG,EAAE;EACnC,OAAOA,GAAG,KAAKF,cAAc,GACzB,CAAC,MAAM,IAAAG,mBAAY,EAAE,GAAEC,aAAO,iBAAgB,EAAE;IAChD,YAAY,EAAE,QAAQ;IACtBC,MAAM,EAAE;EACV,CAAC,EAAE;IAAEC,OAAO,EAAEP;EAAoB,CAAC,CAAC,EAAEQ,IAAI,EAAE,GAC1CL,GAAG;AACT;AAEA,eAAeM,sBAAsB,CAAEC,YAAY,EAAE;EACnD,MAAMC,eAAe,GAAG,IAAAC,yBAAkB,EAACF,YAAY,CAAC;EACxD,IAAI,EAAC,MAAMG,WAAE,CAACC,MAAM,CAACH,eAAe,CAAC,GAAE;IACrC,MAAM,IAAAI,eAAM,EAACJ,eAAe,CAAC;EAC/B;EACA,OAAOA,eAAe;AACxB;AAEA,eAAeK,OAAO,GAAI;EACxB,MAAMC,MAAM,GAAG,MAAM,IAAAC,gBAAS,GAAE;EAChC,MAAMC,MAAM,GAAG,IAAIC,sBAAyB,CAAC;IAC3CT,eAAe,EAAE,MAAMF,sBAAsB,CAACQ,MAAM,CAACI,IAAI;EAC3D,CAAC,CAAC;EACF,MAAMF,MAAM,CAACG,WAAW,CAAC;IACvBL,MAAM;IACNM,QAAQ,EAAE,CAAC,MAAMrB,eAAe,CAACsB,aAAM,CAAC;EAC1C,CAAC,CAAC;AACJ;AAEA,eAAeC,SAAS,GAAI;EAC1B,MAAMT,OAAO,EAAE;AACjB"}
|
|
@@ -1,39 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.getCapValue = getCapValue;
|
|
9
8
|
exports.toW3cCapNames = toW3cCapNames;
|
|
10
|
-
|
|
11
9
|
require("source-map-support/register");
|
|
12
|
-
|
|
13
10
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
14
|
-
|
|
15
11
|
var _driver = require("appium/driver");
|
|
16
|
-
|
|
17
12
|
const W3C_PREFIX = 'goog:';
|
|
18
|
-
|
|
19
13
|
function toW3cCapName(capName) {
|
|
20
14
|
return _lodash.default.isString(capName) && !capName.includes(':') && !(0, _driver.isStandardCap)(capName) ? `${W3C_PREFIX}${capName}` : capName;
|
|
21
15
|
}
|
|
22
|
-
|
|
23
16
|
function getCapValue(allCaps = {}, rawCapName, defaultValue) {
|
|
24
17
|
for (const [capName, capValue] of _lodash.default.toPairs(allCaps)) {
|
|
25
18
|
if (toW3cCapName(capName) === toW3cCapName(rawCapName)) {
|
|
26
19
|
return capValue;
|
|
27
20
|
}
|
|
28
21
|
}
|
|
29
|
-
|
|
30
22
|
return defaultValue;
|
|
31
23
|
}
|
|
32
|
-
|
|
33
24
|
function toW3cCapNames(originalCaps = {}) {
|
|
34
25
|
return _lodash.default.reduce(originalCaps, (acc, value, key) => {
|
|
35
26
|
acc[toW3cCapName(key)] = value;
|
|
36
27
|
return acc;
|
|
37
28
|
}, {});
|
|
38
29
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfUFJFRklYIiwidG9XM2NDYXBOYW1lIiwiY2FwTmFtZSIsIl8iLCJpc1N0cmluZyIsImluY2x1ZGVzIiwiaXNTdGFuZGFyZENhcCIsImdldENhcFZhbHVlIiwiYWxsQ2FwcyIsInJhd0NhcE5hbWUiLCJkZWZhdWx0VmFsdWUiLCJjYXBWYWx1ZSIsInRvUGFpcnMiLCJ0b1czY0NhcE5hbWVzIiwib3JpZ2luYWxDYXBzIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJrZXkiXSwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdG9jb2wtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgaXNTdGFuZGFyZENhcCB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBXM0NfUFJFRklYID0gJ2dvb2c6JztcblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lIChjYXBOYW1lKSB7XG4gIHJldHVybiAoXy5pc1N0cmluZyhjYXBOYW1lKSAmJiAhY2FwTmFtZS5pbmNsdWRlcygnOicpICYmICFpc1N0YW5kYXJkQ2FwKGNhcE5hbWUpKVxuICAgID8gYCR7VzNDX1BSRUZJWH0ke2NhcE5hbWV9YFxuICAgIDogY2FwTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FwVmFsdWUgKGFsbENhcHMgPSB7fSwgcmF3Q2FwTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGZvciAoY29uc3QgW2NhcE5hbWUsIGNhcFZhbHVlXSBvZiBfLnRvUGFpcnMoYWxsQ2FwcykpIHtcbiAgICBpZiAodG9XM2NDYXBOYW1lKGNhcE5hbWUpID09PSB0b1czY0NhcE5hbWUocmF3Q2FwTmFtZSkpIHtcbiAgICAgIHJldHVybiBjYXBWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lcyAob3JpZ2luYWxDYXBzID0ge30pIHtcbiAgcmV0dXJuIF8ucmVkdWNlKG9yaWdpbmFsQ2FwcywgKGFjYywgdmFsdWUsIGtleSkgPT4ge1xuICAgIGFjY1t0b1czY0NhcE5hbWUoa2V5KV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQSxNQUFNQSxVQUFVLEdBQUcsT0FBTztBQUUxQixTQUFTQyxZQUFZLENBQUVDLE9BQU8sRUFBRTtFQUM5QixPQUFRQyxlQUFDLENBQUNDLFFBQVEsQ0FBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQ0EsT0FBTyxDQUFDRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFBQyxxQkFBYSxFQUFDSixPQUFPLENBQUMsR0FDM0UsR0FBRUYsVUFBVyxHQUFFRSxPQUFRLEVBQUMsR0FDekJBLE9BQU87QUFDYjtBQUVBLFNBQVNLLFdBQVcsQ0FBRUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFQyxVQUFVLEVBQUVDLFlBQVksRUFBRTtFQUM1RCxLQUFLLE1BQU0sQ0FBQ1IsT0FBTyxFQUFFUyxRQUFRLENBQUMsSUFBSVIsZUFBQyxDQUFDUyxPQUFPLENBQUNKLE9BQU8sQ0FBQyxFQUFFO0lBQ3BELElBQUlQLFlBQVksQ0FBQ0MsT0FBTyxDQUFDLEtBQUtELFlBQVksQ0FBQ1EsVUFBVSxDQUFDLEVBQUU7TUFDdEQsT0FBT0UsUUFBUTtJQUNqQjtFQUNGO0VBQ0EsT0FBT0QsWUFBWTtBQUNyQjtBQUVBLFNBQVNHLGFBQWEsQ0FBRUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3pDLE9BQU9YLGVBQUMsQ0FBQ1ksTUFBTSxDQUFDRCxZQUFZLEVBQUUsQ0FBQ0UsR0FBRyxFQUFFQyxLQUFLLEVBQUVDLEdBQUcsS0FBSztJQUNqREYsR0FBRyxDQUFDZixZQUFZLENBQUNpQixHQUFHLENBQUMsQ0FBQyxHQUFHRCxLQUFLO0lBQzlCLE9BQU9ELEdBQUc7RUFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDUiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol-helpers.js","names":["W3C_PREFIX","toW3cCapName","capName","_","isString","includes","isStandardCap","getCapValue","allCaps","rawCapName","defaultValue","capValue","toPairs","toW3cCapNames","originalCaps","reduce","acc","value","key"],"sources":["../../lib/protocol-helpers.js"],"sourcesContent":["import _ from 'lodash';\nimport { isStandardCap } from 'appium/driver';\n\nconst W3C_PREFIX = 'goog:';\n\nfunction toW3cCapName (capName) {\n return (_.isString(capName) && !capName.includes(':') && !isStandardCap(capName))\n ? `${W3C_PREFIX}${capName}`\n : capName;\n}\n\nfunction getCapValue (allCaps = {}, rawCapName, defaultValue) {\n for (const [capName, capValue] of _.toPairs(allCaps)) {\n if (toW3cCapName(capName) === toW3cCapName(rawCapName)) {\n return capValue;\n }\n }\n return defaultValue;\n}\n\nfunction toW3cCapNames (originalCaps = {}) {\n return _.reduce(originalCaps, (acc, value, key) => {\n acc[toW3cCapName(key)] = value;\n return acc;\n }, {});\n}\n\nexport { toW3cCapNames, getCapValue };\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"protocol-helpers.js","names":["W3C_PREFIX","toW3cCapName","capName","_","isString","includes","isStandardCap","getCapValue","allCaps","rawCapName","defaultValue","capValue","toPairs","toW3cCapNames","originalCaps","reduce","acc","value","key"],"sources":["../../lib/protocol-helpers.js"],"sourcesContent":["import _ from 'lodash';\nimport { isStandardCap } from 'appium/driver';\n\nconst W3C_PREFIX = 'goog:';\n\nfunction toW3cCapName (capName) {\n return (_.isString(capName) && !capName.includes(':') && !isStandardCap(capName))\n ? `${W3C_PREFIX}${capName}`\n : capName;\n}\n\nfunction getCapValue (allCaps = {}, rawCapName, defaultValue) {\n for (const [capName, capValue] of _.toPairs(allCaps)) {\n if (toW3cCapName(capName) === toW3cCapName(rawCapName)) {\n return capValue;\n }\n }\n return defaultValue;\n}\n\nfunction toW3cCapNames (originalCaps = {}) {\n return _.reduce(originalCaps, (acc, value, key) => {\n acc[toW3cCapName(key)] = value;\n return acc;\n }, {});\n}\n\nexport { toW3cCapNames, getCapValue };\n"],"mappings":";;;;;;;;;AAAA;AACA;AAEA,MAAMA,UAAU,GAAG,OAAO;AAE1B,SAASC,YAAY,CAAEC,OAAO,EAAE;EAC9B,OAAQC,eAAC,CAACC,QAAQ,CAACF,OAAO,CAAC,IAAI,CAACA,OAAO,CAACG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAAC,qBAAa,EAACJ,OAAO,CAAC,GAC3E,GAAEF,UAAW,GAAEE,OAAQ,EAAC,GACzBA,OAAO;AACb;AAEA,SAASK,WAAW,CAAEC,OAAO,GAAG,CAAC,CAAC,EAAEC,UAAU,EAAEC,YAAY,EAAE;EAC5D,KAAK,MAAM,CAACR,OAAO,EAAES,QAAQ,CAAC,IAAIR,eAAC,CAACS,OAAO,CAACJ,OAAO,CAAC,EAAE;IACpD,IAAIP,YAAY,CAACC,OAAO,CAAC,KAAKD,YAAY,CAACQ,UAAU,CAAC,EAAE;MACtD,OAAOE,QAAQ;IACjB;EACF;EACA,OAAOD,YAAY;AACrB;AAEA,SAASG,aAAa,CAAEC,YAAY,GAAG,CAAC,CAAC,EAAE;EACzC,OAAOX,eAAC,CAACY,MAAM,CAACD,YAAY,EAAE,CAACE,GAAG,EAAEC,KAAK,EAAEC,GAAG,KAAK;IACjDF,GAAG,CAACf,YAAY,CAACiB,GAAG,CAAC,CAAC,GAAGD,KAAK;IAC9B,OAAOD,GAAG;EACZ,CAAC,EAAE,CAAC,CAAC,CAAC;AACR"}
|