UNPKG

2.89 kBJavaScriptView Raw
1"use strict";
2
3const {CLI_MODE} = require('../commons/constants');
4const BaseWorker = require('./BaseWorker');
5const {timeoutMessages} = require('../commons/constants');
6const logger = require('../commons/logger').getLogger("worker-selenium");
7const Promise = require('bluebird');
8const exec = Promise.promisify(require('child_process').exec);
9const reporter = require("../reports/reporter");
10const MobileTestPlayer = require('../player/mobile/mobileTestPlayer');
11const { manifestVersion } = require('../commons/getSessionPlayerRequire');
12
13class WorkerAppium extends BaseWorker {
14 initPlayer(testRunHandler) {
15 const { projectData } = this.options;
16 return new MobileTestPlayer(this.id, testRunHandler.getRunParams(), projectData.type);
17 }
18
19 getBrowserOnce(testRunHandler, customExtensionLocalLocation, player) {
20 reporter.onGetSession(this.id, this.testName, testRunHandler.getRunMode());
21
22 player.clearSessionTabs();
23 const {driver} = player;
24
25 //use fake browser name
26 return this.getGridSlot("chrome", testRunHandler)
27 .then(gridInfo => driver.init(this.options, gridInfo, testRunHandler.getNativeAppData(), this.testName, this.testResultId))
28 .then(() => player.addTab())
29 .catch(err => {
30 logger.error(`failed to get device/app (message=${err.message})`, {err: err});
31 throw err;
32 });
33 }
34
35 runTestCleanup() {
36 const { mode } = this.options;
37
38 if(mode === CLI_MODE.DEVICE_FARM_APPIUM) {
39 return exec("adb shell pm clear $DEVICEFARM_APP_NAME");
40 }
41 return Promise.resolve();
42 }
43
44 runTestOnce(testRunHandler, player) {
45 const version = manifestVersion || "runner";
46 let that = this;
47
48 reporter.onWaitToTestComplete(this.id, this.isCodeMode);
49
50 function runSeleniumTest() {
51 return new Promise(resolve => player.sessionPlayer.playByTestId(that.testId, that.executionId, that.testResultId, that.baseUrl, that.userData, version, resolve, false, that.overrideTestConfigId, that.branch))
52 .timeout(that.testRunTimeout, timeoutMessages.TEST_COMPLETE_TIMEOUT_MSG)
53 .catch(Promise.TimeoutError, err => {
54 player.sessionPlayer.stopPlayingOnTestTimeout && player.sessionPlayer.stopPlayingOnTestTimeout();
55 throw err;
56 })
57 .then(testResult => {
58 testResult.stepsResults = null;
59 return Promise.resolve(testResult);
60 });
61 }
62
63 return super.runTestOnce(testRunHandler, player)
64 .then(() => runSeleniumTest())
65 .catch(err => {
66 logger.error("failed to run test once", {err: err});
67 return Promise.reject(err);
68 });
69 }
70}
71
72module.exports = WorkerAppium;