1 | "use strict";
|
2 |
|
3 | const {CLI_MODE} = require('../commons/constants');
|
4 | const BaseWorker = require('./BaseWorker');
|
5 | const {timeoutMessages} = require('../commons/constants');
|
6 | const logger = require('../commons/logger').getLogger("worker-selenium");
|
7 | const Promise = require('bluebird');
|
8 | const exec = Promise.promisify(require('child_process').exec);
|
9 | const reporter = require("../reports/reporter");
|
10 | const MobileTestPlayer = require('../player/mobile/mobileTestPlayer');
|
11 | const { manifestVersion } = require('../commons/getSessionPlayerRequire');
|
12 |
|
13 | class 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 |
|
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 |
|
72 | module.exports = WorkerAppium;
|