@testim/testim-cli 3.225.0 → 3.226.0
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/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testim/testim-cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.226.0",
|
|
4
4
|
"lockfileVersion": 2,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@testim/testim-cli",
|
|
9
|
-
"version": "3.
|
|
9
|
+
"version": "3.226.0",
|
|
10
10
|
"license": "Proprietary",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@applitools/eyes-sdk-core": "13.0.0",
|
|
@@ -651,9 +651,9 @@
|
|
|
651
651
|
}
|
|
652
652
|
},
|
|
653
653
|
"node_modules/@babel/helper-module-transforms": {
|
|
654
|
-
"version": "7.
|
|
655
|
-
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.
|
|
656
|
-
"integrity": "sha512-
|
|
654
|
+
"version": "7.17.6",
|
|
655
|
+
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz",
|
|
656
|
+
"integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==",
|
|
657
657
|
"dev": true,
|
|
658
658
|
"dependencies": {
|
|
659
659
|
"@babel/helper-environment-visitor": "^7.16.7",
|
|
@@ -662,8 +662,8 @@
|
|
|
662
662
|
"@babel/helper-split-export-declaration": "^7.16.7",
|
|
663
663
|
"@babel/helper-validator-identifier": "^7.16.7",
|
|
664
664
|
"@babel/template": "^7.16.7",
|
|
665
|
-
"@babel/traverse": "^7.
|
|
666
|
-
"@babel/types": "^7.
|
|
665
|
+
"@babel/traverse": "^7.17.3",
|
|
666
|
+
"@babel/types": "^7.17.0"
|
|
667
667
|
},
|
|
668
668
|
"engines": {
|
|
669
669
|
"node": ">=6.9.0"
|
|
@@ -1812,6 +1812,14 @@
|
|
|
1812
1812
|
"node": ">= 0.6"
|
|
1813
1813
|
}
|
|
1814
1814
|
},
|
|
1815
|
+
"node_modules/accepts/node_modules/mime-db": {
|
|
1816
|
+
"version": "1.51.0",
|
|
1817
|
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
|
|
1818
|
+
"integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
|
|
1819
|
+
"engines": {
|
|
1820
|
+
"node": ">= 0.6"
|
|
1821
|
+
}
|
|
1822
|
+
},
|
|
1815
1823
|
"node_modules/accepts/node_modules/mime-types": {
|
|
1816
1824
|
"version": "2.1.34",
|
|
1817
1825
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
|
|
@@ -1874,9 +1882,9 @@
|
|
|
1874
1882
|
}
|
|
1875
1883
|
},
|
|
1876
1884
|
"node_modules/agentkeepalive": {
|
|
1877
|
-
"version": "4.2.
|
|
1878
|
-
"resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.
|
|
1879
|
-
"integrity": "sha512-
|
|
1885
|
+
"version": "4.2.1",
|
|
1886
|
+
"resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
|
|
1887
|
+
"integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
|
|
1880
1888
|
"dependencies": {
|
|
1881
1889
|
"debug": "^4.1.0",
|
|
1882
1890
|
"depd": "^1.1.2",
|
|
@@ -4831,9 +4839,9 @@
|
|
|
4831
4839
|
}
|
|
4832
4840
|
},
|
|
4833
4841
|
"node_modules/electron-to-chromium": {
|
|
4834
|
-
"version": "1.4.
|
|
4835
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.
|
|
4836
|
-
"integrity": "sha512-
|
|
4842
|
+
"version": "1.4.73",
|
|
4843
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz",
|
|
4844
|
+
"integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==",
|
|
4837
4845
|
"dev": true
|
|
4838
4846
|
},
|
|
4839
4847
|
"node_modules/emoji-regex": {
|
|
@@ -8615,9 +8623,9 @@
|
|
|
8615
8623
|
}
|
|
8616
8624
|
},
|
|
8617
8625
|
"node_modules/mime-db": {
|
|
8618
|
-
"version": "1.
|
|
8619
|
-
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.
|
|
8620
|
-
"integrity": "sha512-
|
|
8626
|
+
"version": "1.52.0",
|
|
8627
|
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
|
8628
|
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
|
8621
8629
|
"engines": {
|
|
8622
8630
|
"node": ">= 0.6"
|
|
8623
8631
|
}
|
|
@@ -16135,9 +16143,9 @@
|
|
|
16135
16143
|
}
|
|
16136
16144
|
},
|
|
16137
16145
|
"node_modules/vm2": {
|
|
16138
|
-
"version": "3.9.
|
|
16139
|
-
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.
|
|
16140
|
-
"integrity": "sha512
|
|
16146
|
+
"version": "3.9.9",
|
|
16147
|
+
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz",
|
|
16148
|
+
"integrity": "sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw==",
|
|
16141
16149
|
"dependencies": {
|
|
16142
16150
|
"acorn": "^8.7.0",
|
|
16143
16151
|
"acorn-walk": "^8.2.0"
|
|
@@ -17163,9 +17171,9 @@
|
|
|
17163
17171
|
}
|
|
17164
17172
|
},
|
|
17165
17173
|
"@babel/helper-module-transforms": {
|
|
17166
|
-
"version": "7.
|
|
17167
|
-
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.
|
|
17168
|
-
"integrity": "sha512-
|
|
17174
|
+
"version": "7.17.6",
|
|
17175
|
+
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz",
|
|
17176
|
+
"integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==",
|
|
17169
17177
|
"dev": true,
|
|
17170
17178
|
"requires": {
|
|
17171
17179
|
"@babel/helper-environment-visitor": "^7.16.7",
|
|
@@ -17174,8 +17182,8 @@
|
|
|
17174
17182
|
"@babel/helper-split-export-declaration": "^7.16.7",
|
|
17175
17183
|
"@babel/helper-validator-identifier": "^7.16.7",
|
|
17176
17184
|
"@babel/template": "^7.16.7",
|
|
17177
|
-
"@babel/traverse": "^7.
|
|
17178
|
-
"@babel/types": "^7.
|
|
17185
|
+
"@babel/traverse": "^7.17.3",
|
|
17186
|
+
"@babel/types": "^7.17.0"
|
|
17179
17187
|
}
|
|
17180
17188
|
},
|
|
17181
17189
|
"@babel/helper-simple-access": {
|
|
@@ -18099,6 +18107,11 @@
|
|
|
18099
18107
|
"negotiator": "0.6.3"
|
|
18100
18108
|
},
|
|
18101
18109
|
"dependencies": {
|
|
18110
|
+
"mime-db": {
|
|
18111
|
+
"version": "1.51.0",
|
|
18112
|
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
|
|
18113
|
+
"integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
|
|
18114
|
+
},
|
|
18102
18115
|
"mime-types": {
|
|
18103
18116
|
"version": "2.1.34",
|
|
18104
18117
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
|
|
@@ -18144,9 +18157,9 @@
|
|
|
18144
18157
|
}
|
|
18145
18158
|
},
|
|
18146
18159
|
"agentkeepalive": {
|
|
18147
|
-
"version": "4.2.
|
|
18148
|
-
"resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.
|
|
18149
|
-
"integrity": "sha512-
|
|
18160
|
+
"version": "4.2.1",
|
|
18161
|
+
"resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
|
|
18162
|
+
"integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
|
|
18150
18163
|
"requires": {
|
|
18151
18164
|
"debug": "^4.1.0",
|
|
18152
18165
|
"depd": "^1.1.2",
|
|
@@ -20550,9 +20563,9 @@
|
|
|
20550
20563
|
}
|
|
20551
20564
|
},
|
|
20552
20565
|
"electron-to-chromium": {
|
|
20553
|
-
"version": "1.4.
|
|
20554
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.
|
|
20555
|
-
"integrity": "sha512-
|
|
20566
|
+
"version": "1.4.73",
|
|
20567
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.73.tgz",
|
|
20568
|
+
"integrity": "sha512-RlCffXkE/LliqfA5m29+dVDPB2r72y2D2egMMfIy3Le8ODrxjuZNVo4NIC2yPL01N4xb4nZQLwzi6Z5tGIGLnA==",
|
|
20556
20569
|
"dev": true
|
|
20557
20570
|
},
|
|
20558
20571
|
"emoji-regex": {
|
|
@@ -23580,9 +23593,9 @@
|
|
|
23580
23593
|
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
|
|
23581
23594
|
},
|
|
23582
23595
|
"mime-db": {
|
|
23583
|
-
"version": "1.
|
|
23584
|
-
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.
|
|
23585
|
-
"integrity": "sha512-
|
|
23596
|
+
"version": "1.52.0",
|
|
23597
|
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
|
23598
|
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
|
|
23586
23599
|
},
|
|
23587
23600
|
"mime-types": {
|
|
23588
23601
|
"version": "2.1.27",
|
|
@@ -29284,9 +29297,9 @@
|
|
|
29284
29297
|
}
|
|
29285
29298
|
},
|
|
29286
29299
|
"vm2": {
|
|
29287
|
-
"version": "3.9.
|
|
29288
|
-
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.
|
|
29289
|
-
"integrity": "sha512
|
|
29300
|
+
"version": "3.9.9",
|
|
29301
|
+
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz",
|
|
29302
|
+
"integrity": "sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw==",
|
|
29290
29303
|
"requires": {
|
|
29291
29304
|
"acorn": "^8.7.0",
|
|
29292
29305
|
"acorn-walk": "^8.2.0"
|
package/package.json
CHANGED
package/testRunStatus.js
CHANGED
|
@@ -63,7 +63,7 @@ const RunStatus = function (testInfoList, options, testPlanId, branchToUse) {
|
|
|
63
63
|
testPlanId,
|
|
64
64
|
testPlans: options.testPlan,
|
|
65
65
|
testLabels: options.label,
|
|
66
|
-
testSuites: _.uniq(
|
|
66
|
+
testSuites: _.uniq(testInfoList.flatMap(test => test.testSuites)),
|
|
67
67
|
testNames: options.name,
|
|
68
68
|
testIds: options.testId,
|
|
69
69
|
testConfigs: options.testConfigNames,
|
|
@@ -173,10 +173,12 @@ RunStatus.prototype.testStartReport = function (test, executionId, testRetryKey)
|
|
|
173
173
|
return Promise.resolve();
|
|
174
174
|
}
|
|
175
175
|
return runHook(this.options.beforeTest, Object.assign({}, test, { exportsGlobal: this.exportsGlobal }), this.options.userData.loginData.token)
|
|
176
|
-
.then(params => {
|
|
176
|
+
.then(async params => {
|
|
177
177
|
this.options.runParams[test.resultId] = test.config.testData = Object.assign({}, test.config.testData, this.exportsGlobal, this.fileUserParamsData, this.beforeSuiteParams, params);
|
|
178
178
|
test.startTime = Date.now();
|
|
179
|
-
|
|
179
|
+
await this.updateTestStatusRunning(test, executionId, testRetryKey);
|
|
180
|
+
|
|
181
|
+
return test;
|
|
180
182
|
}).catch(err => {
|
|
181
183
|
logger.error('Failed to start test', { err });
|
|
182
184
|
throw err;
|
package/workers/BaseWorker.js
CHANGED
|
@@ -141,8 +141,7 @@ class BaseWorker {
|
|
|
141
141
|
const player = this.initPlayer(testRunHandler);
|
|
142
142
|
try {
|
|
143
143
|
gridInfo = await gridService.handleHybridOrVendorIfNeeded(
|
|
144
|
-
this.options, gridInfo, this.testRunConfig, this.lambdatestService,
|
|
145
|
-
{ maxRetries: getBrowserRetriesNumber, currentRetry: failedGetBrowserAttempts + 1 },
|
|
144
|
+
this.options, gridInfo, this.testRunConfig, this.lambdatestService, { maxRetries: getBrowserRetriesNumber, currentRetry: failedGetBrowserAttempts + 1 },
|
|
146
145
|
);
|
|
147
146
|
this.options.gridData.provider = gridInfo.provider;
|
|
148
147
|
this.options.gridData.host = gridInfo.host;
|
|
@@ -192,9 +191,10 @@ class BaseWorker {
|
|
|
192
191
|
}
|
|
193
192
|
|
|
194
193
|
perf.log('before runTest onTestStarted');
|
|
195
|
-
await this.onTestStarted(this.id, testRunHandler.getTestId(), testRunHandler.getTestResultId(), shouldRerun, testRunHandler.getRetryKey());
|
|
196
|
-
|
|
194
|
+
const test = await this.onTestStarted(this.id, testRunHandler.getTestId(), testRunHandler.getTestResultId(), shouldRerun, testRunHandler.getRetryKey());
|
|
195
|
+
testRunHandler._baseUrl = test.config.baseUrl;
|
|
197
196
|
|
|
197
|
+
const testPlayer = await this.getTestPlayer(testRunHandler, customExtensionLocalLocation);
|
|
198
198
|
try {
|
|
199
199
|
return await this.runTestOnce(testRunHandler, testPlayer);
|
|
200
200
|
} finally {
|
|
@@ -276,13 +276,13 @@ class BaseWorker {
|
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
const msg = err instanceof Error ? err.message : err;
|
|
279
|
-
if (msg.
|
|
279
|
+
if (msg.includes(GET_BROWSER_TIMEOUT_MSG)) {
|
|
280
280
|
return { errorType: SETUP_TIMEOUT, reason: "Test couldn't get browser" };
|
|
281
281
|
}
|
|
282
|
-
if (msg.
|
|
282
|
+
if (msg.includes(TEST_START_TIMEOUT_MSG)) {
|
|
283
283
|
return { errorType: SETUP_TIMEOUT, reason: "Test couldn't be started" };
|
|
284
284
|
}
|
|
285
|
-
if (msg.
|
|
285
|
+
if (msg.includes(TEST_COMPLETE_TIMEOUT_MSG)) {
|
|
286
286
|
if (!this.testRunTimeout) {
|
|
287
287
|
return { errorType: SETUP_TIMEOUT, reason: 'Test timeout reached: test is too long' };
|
|
288
288
|
}
|
|
@@ -1,21 +1,32 @@
|
|
|
1
|
+
const proxyquire = require('proxyquire');
|
|
2
|
+
|
|
1
3
|
const { expect, sinon } = require('../../test/utils/testUtils');
|
|
2
|
-
const BaseWorker = require('./BaseWorker');
|
|
3
4
|
const gridService = require('../services/gridService');
|
|
4
5
|
const reporter = require('../reports/reporter');
|
|
5
6
|
const Bluebird = require('bluebird');
|
|
6
7
|
const { PageNotAvailableError, GridError, GetBrowserError } = require('../errors');
|
|
7
8
|
const servicesApi = require('../commons/testimServicesApi');
|
|
9
|
+
const { releasePlayer } = require('./workerUtils');
|
|
10
|
+
|
|
8
11
|
|
|
9
12
|
describe('BaseWorker', () => {
|
|
10
13
|
let worker;
|
|
11
14
|
let handleHybridStub;
|
|
12
15
|
let getGridSlotStub;
|
|
13
|
-
|
|
16
|
+
let runTestOnceStub = sinon.stub();
|
|
14
17
|
let testRunHandlerMock;
|
|
15
18
|
let testPlayerMock;
|
|
19
|
+
const onTestStartedStub = sinon.stub();
|
|
20
|
+
const sandbox = sinon.createSandbox();
|
|
16
21
|
|
|
17
22
|
beforeEach(() => {
|
|
18
|
-
|
|
23
|
+
const BaseWorker = proxyquire.noCallThru()('./BaseWorker', {
|
|
24
|
+
'./workerUtils': {
|
|
25
|
+
releasePlayer: () => sinon.stub().resolves({}),
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
worker = new BaseWorker(null, {}, null, null, onTestStartedStub);
|
|
19
30
|
worker.userData = {};
|
|
20
31
|
worker.options = { gridData: {}, browser: 'chrome', company: { companyId: 'companyId' }, getBrowserTimeout: 1000, getSessionTimeout: 100, getBrowserRetries: 10 };
|
|
21
32
|
worker.testRunConfig = {};
|
|
@@ -25,6 +36,7 @@ describe('BaseWorker', () => {
|
|
|
25
36
|
|
|
26
37
|
sinon.stub(worker, 'initPlayer').returns(testPlayerMock);
|
|
27
38
|
sinon.stub(worker, 'getBrowserOnce').returns({});
|
|
39
|
+
runTestOnceStub = sinon.stub(worker, 'runTestOnce');
|
|
28
40
|
handleHybridStub = sinon.stub(gridService, 'handleHybridOrVendorIfNeeded').callThrough();
|
|
29
41
|
getGridSlotStub = sinon.stub(gridService, 'getGridSlot').resolves({});
|
|
30
42
|
|
|
@@ -154,5 +166,27 @@ describe('BaseWorker', () => {
|
|
|
154
166
|
expect(worker.getBrowserOnce.getCall(2).args[3]).to.shallowDeepEqual({ type: 'testimHybrid', gridId: 'gridId', provider: 'a', host: 'google.com', user: undefined, key: undefined, port: 4444 });
|
|
155
167
|
});
|
|
156
168
|
});
|
|
169
|
+
|
|
170
|
+
describe('runTest', () => {
|
|
171
|
+
it('should call the runTestOnc with the base url of the test object we acquired from onTestStarted', async () => {
|
|
172
|
+
const testRunHandler = {
|
|
173
|
+
_baseUrl: 'https://testim.io',
|
|
174
|
+
getTestStatus: () => sinon.stub().returns(42),
|
|
175
|
+
getTestId: () => sinon.stub().returns(42),
|
|
176
|
+
getTestResultId: () => sinon.stub().returns(42),
|
|
177
|
+
getRetryKey: () => sinon.stub().returns(42),
|
|
178
|
+
getExecutionId: () => sinon.stub().returns(42),
|
|
179
|
+
testRunHandler: () => sinon.stub().returns(42),
|
|
180
|
+
clearTestResult: () => sinon.stub().returns(42),
|
|
181
|
+
};
|
|
182
|
+
onTestStartedStub.returns({
|
|
183
|
+
config: {
|
|
184
|
+
baseUrl: 'http://demo.testim.io/',
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
await worker.runTest(testRunHandler);
|
|
188
|
+
expect(runTestOnceStub.firstCall.firstArg._baseUrl).to.equals('http://demo.testim.io/');
|
|
189
|
+
});
|
|
190
|
+
});
|
|
157
191
|
});
|
|
158
192
|
});
|
|
@@ -45,7 +45,8 @@ class WorkerExtensionSingleBrowser extends WorkerExtension {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
perf.log('before runTest onTestStarted single browser');
|
|
48
|
-
await this.onTestStarted(this.id, testRunHandler.getTestId(), testRunHandler.getTestResultId(), shouldRerun, testRunHandler.getRetryKey());
|
|
48
|
+
const test = await this.onTestStarted(this.id, testRunHandler.getTestId(), testRunHandler.getTestResultId(), shouldRerun, testRunHandler.getRetryKey());
|
|
49
|
+
testRunHandler._baseUrl = test.config.baseUrl;
|
|
49
50
|
const testPlayer = await this.getTestPlayer(testRunHandler, customExtensionLocalLocation);
|
|
50
51
|
|
|
51
52
|
testRunHandler.markClearBrowser();
|