appium-xcuitest-driver 10.13.1 → 10.13.3
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 +12 -0
- package/build/lib/commands/app-management.d.ts +99 -76
- package/build/lib/commands/app-management.d.ts.map +1 -1
- package/build/lib/commands/app-management.js +83 -73
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/certificate.d.ts +14 -19
- package/build/lib/commands/certificate.d.ts.map +1 -1
- package/build/lib/commands/certificate.js +24 -31
- package/build/lib/commands/certificate.js.map +1 -1
- package/build/lib/commands/element.d.ts +83 -67
- package/build/lib/commands/element.d.ts.map +1 -1
- package/build/lib/commands/element.js +111 -134
- package/build/lib/commands/element.js.map +1 -1
- package/build/lib/commands/file-movement.d.ts +31 -42
- package/build/lib/commands/file-movement.d.ts.map +1 -1
- package/build/lib/commands/file-movement.js +146 -205
- package/build/lib/commands/file-movement.js.map +1 -1
- package/build/lib/commands/find.d.ts +20 -12
- package/build/lib/commands/find.d.ts.map +1 -1
- package/build/lib/commands/find.js +27 -65
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/navigation.d.ts.map +1 -1
- package/build/lib/commands/navigation.js +12 -14
- package/build/lib/commands/navigation.js.map +1 -1
- package/build/lib/commands/performance.d.ts +36 -55
- package/build/lib/commands/performance.d.ts.map +1 -1
- package/build/lib/commands/performance.js +93 -86
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/recordscreen.d.ts +31 -63
- package/build/lib/commands/recordscreen.d.ts.map +1 -1
- package/build/lib/commands/recordscreen.js +29 -28
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/execute-method-map.d.ts.map +1 -1
- package/build/lib/execute-method-map.js +0 -1
- package/build/lib/execute-method-map.js.map +1 -1
- package/lib/commands/app-management.ts +414 -0
- package/lib/commands/{certificate.js → certificate.ts} +55 -50
- package/lib/commands/element.ts +419 -0
- package/lib/commands/{file-movement.js → file-movement.ts} +212 -235
- package/lib/commands/find.ts +277 -0
- package/lib/commands/navigation.js +20 -14
- package/lib/commands/{performance.js → performance.ts} +133 -114
- package/lib/commands/{recordscreen.js → recordscreen.ts} +78 -50
- package/lib/execute-method-map.ts +0 -1
- package/npm-shrinkwrap.json +5 -5
- package/package.json +1 -1
- package/lib/commands/app-management.js +0 -346
- package/lib/commands/element.js +0 -423
- package/lib/commands/find.js +0 -205
|
@@ -7,7 +7,7 @@ exports.PerfRecorder = void 0;
|
|
|
7
7
|
exports.mobileStartPerfRecord = mobileStartPerfRecord;
|
|
8
8
|
exports.mobileStopPerfRecord = mobileStopPerfRecord;
|
|
9
9
|
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
-
const
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
11
|
const support_1 = require("appium/support");
|
|
12
12
|
const teen_process_1 = require("teen_process");
|
|
13
13
|
const utils_1 = require("../utils");
|
|
@@ -39,10 +39,9 @@ const XCRUN = 'xcrun';
|
|
|
39
39
|
*
|
|
40
40
|
* Read [Recording, Pausing, and Stopping Traces](https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Recording,Pausing,andStoppingTraces.html) for more details.
|
|
41
41
|
*
|
|
42
|
-
* @param
|
|
43
|
-
* @param
|
|
44
|
-
* @param
|
|
45
|
-
* @this {XCUITestDriver}
|
|
42
|
+
* @param timeout - The maximum count of milliseconds to record the profiling information.
|
|
43
|
+
* @param profileName - The name of existing performance profile to apply. Can also contain the full path to the chosen template on the server file system. Note: not all profiles are supported on mobile devices.
|
|
44
|
+
* @param pid - The ID of the process to measure the performance for. Set it to `current` in order to measure the performance of the process, which belongs to the currently active application. All processes running on the device are measured if `pid` is unset (the default setting).
|
|
46
45
|
*/
|
|
47
46
|
async function mobileStartPerfRecord(timeout = DEFAULT_TIMEOUT_MS, profileName = DEFAULT_PROFILE_NAME, pid) {
|
|
48
47
|
if (!this.isFeatureEnabled(PERF_RECORD_FEAT_NAME) && !this.isRealDevice()) {
|
|
@@ -62,7 +61,7 @@ async function mobileStartPerfRecord(timeout = DEFAULT_TIMEOUT_MS, profileName =
|
|
|
62
61
|
let realPid;
|
|
63
62
|
if (pid) {
|
|
64
63
|
if (lodash_1.default.toLower(String(pid)) === DEFAULT_PID) {
|
|
65
|
-
const appInfo =
|
|
64
|
+
const appInfo = (await this.proxyCommand('/wda/activeAppInfo', 'GET'));
|
|
66
65
|
realPid = appInfo.pid;
|
|
67
66
|
}
|
|
68
67
|
else {
|
|
@@ -72,7 +71,7 @@ async function mobileStartPerfRecord(timeout = DEFAULT_TIMEOUT_MS, profileName =
|
|
|
72
71
|
const recorder = new PerfRecorder(await support_1.tempDir.openDir(), this.device.udid, {
|
|
73
72
|
timeout: parseInt(String(timeout), 10),
|
|
74
73
|
profileName,
|
|
75
|
-
pid:
|
|
74
|
+
pid: realPid,
|
|
76
75
|
});
|
|
77
76
|
await recorder.start();
|
|
78
77
|
this._perfRecorders = [...(this._perfRecorders || []), recorder];
|
|
@@ -84,19 +83,17 @@ async function mobileStartPerfRecord(timeout = DEFAULT_TIMEOUT_MS, profileName =
|
|
|
84
83
|
*
|
|
85
84
|
* The resulting file in `.trace` format can be either returned directly as base64-encoded zip archive or uploaded to a remote location (such files can be pretty large). Afterwards it is possible to unarchive and open such files with Xcode Dev Tools.
|
|
86
85
|
*
|
|
87
|
-
* @param
|
|
88
|
-
* @param
|
|
89
|
-
* @param
|
|
90
|
-
* @param
|
|
91
|
-
* @param
|
|
92
|
-
* @param
|
|
93
|
-
* @param
|
|
94
|
-
* @param
|
|
95
|
-
*
|
|
96
|
-
* @returns {Promise<string>} The resulting file in `.trace` format. This file can either be returned directly as base64-encoded `.zip` archive or uploaded to a remote location (note that such files may be large), _depending on the `remotePath` argument value._ Thereafter, the file may be unarchived and opened with Xcode Developer Tools.
|
|
86
|
+
* @param remotePath - The path to the remote location, where the resulting zipped `.trace` file should be uploaded. The following protocols are supported: `http`, `https`, `ftp`. Null or empty string value (the default setting) means the content of resulting file should be zipped, encoded as Base64 and passed as the endpoint response value. An exception will be thrown if the generated file is too big to fit into the available process memory.
|
|
87
|
+
* @param user - The name of the user for the remote authentication. Only works if `remotePath` is provided.
|
|
88
|
+
* @param pass - The password for the remote authentication. Only works if `remotePath` is provided.
|
|
89
|
+
* @param method - The http multipart upload method name. Only works if `remotePath` is provided. Defaults to `PUT`
|
|
90
|
+
* @param profileName - The name of existing performance profile to stop the recording for. Multiple recorders for different profile names could be executed at the same time.
|
|
91
|
+
* @param headers - Additional headers mapping for multipart http(s) uploads
|
|
92
|
+
* @param fileFieldName - The name of the form field, where the file content BLOB should be stored for http(s) uploads. Defaults to `file`
|
|
93
|
+
* @param formFields - Additional form fields for multipart http(s) uploads
|
|
94
|
+
* @returns The resulting file in `.trace` format. This file can either be returned directly as base64-encoded `.zip` archive or uploaded to a remote location (note that such files may be large), _depending on the `remotePath` argument value._ Thereafter, the file may be unarchived and opened with Xcode Developer Tools.
|
|
97
95
|
* @throws {Error} If no performance recording with given profile name/device udid combination
|
|
98
96
|
* has been started before or the resulting .trace file has not been generated properly.
|
|
99
|
-
* @this {XCUITestDriver}
|
|
100
97
|
*/
|
|
101
98
|
async function mobileStopPerfRecord(remotePath, user, pass, method, profileName = DEFAULT_PROFILE_NAME, headers, fileFieldName, formFields) {
|
|
102
99
|
if (!this.isFeatureEnabled(PERF_RECORD_FEAT_NAME) && !this.isRealDevice()) {
|
|
@@ -112,7 +109,10 @@ async function mobileStopPerfRecord(remotePath, user, pass, method, profileName
|
|
|
112
109
|
`and device ${this.device.udid}. Have you started the profiling before?`);
|
|
113
110
|
}
|
|
114
111
|
const recorder = lodash_1.default.first(recorders);
|
|
115
|
-
|
|
112
|
+
if (!recorder) {
|
|
113
|
+
throw this.log.errorWithException(`No recorder found for performance profile '${profileName}' and device ${this.device.udid}`);
|
|
114
|
+
}
|
|
115
|
+
const resultPath = await recorder.stop();
|
|
116
116
|
if (!(await support_1.fs.exists(resultPath))) {
|
|
117
117
|
throw this.log.errorWithException(`There is no ${DEFAULT_EXT} file found for performance profile '${profileName}' ` +
|
|
118
118
|
`and device ${this.device.udid}. Make sure the selected profile is supported on this device`);
|
|
@@ -129,35 +129,22 @@ async function mobileStopPerfRecord(remotePath, user, pass, method, profileName
|
|
|
129
129
|
await support_1.fs.rimraf(resultPath);
|
|
130
130
|
return result;
|
|
131
131
|
}
|
|
132
|
-
async function requireXctrace() {
|
|
133
|
-
const xcrunPath = await requireXcrun();
|
|
134
|
-
try {
|
|
135
|
-
await (0, teen_process_1.exec)(xcrunPath, [XCTRACE, 'help']);
|
|
136
|
-
}
|
|
137
|
-
catch (e) {
|
|
138
|
-
throw new Error(`${XCTRACE} is not available for the active Xcode version. ` +
|
|
139
|
-
`Please make sure XCode is up to date. Original error: ${e.stderr || e.message}`);
|
|
140
|
-
}
|
|
141
|
-
return xcrunPath;
|
|
142
|
-
}
|
|
143
|
-
async function requireInstruments() {
|
|
144
|
-
try {
|
|
145
|
-
return await support_1.fs.which(INSTRUMENTS);
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
throw new Error(`${INSTRUMENTS} has not been found in PATH. ` +
|
|
149
|
-
`Please make sure XCode development tools are installed`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
132
|
class PerfRecorder {
|
|
153
|
-
/** @type {import('teen_process').SubProcess|null} */
|
|
154
133
|
_process;
|
|
134
|
+
_zippedReportPath;
|
|
135
|
+
_timeout;
|
|
136
|
+
_profileName;
|
|
137
|
+
_reportPath;
|
|
138
|
+
_pid;
|
|
139
|
+
_udid;
|
|
140
|
+
_logger;
|
|
141
|
+
_archivePromise;
|
|
155
142
|
constructor(reportRoot, udid, opts = {}) {
|
|
156
143
|
this._process = null;
|
|
157
144
|
this._zippedReportPath = '';
|
|
158
145
|
this._timeout = opts.timeout && opts.timeout > 0 ? opts.timeout : DEFAULT_TIMEOUT_MS;
|
|
159
146
|
this._profileName = opts.profileName || DEFAULT_PROFILE_NAME;
|
|
160
|
-
this._reportPath =
|
|
147
|
+
this._reportPath = node_path_1.default.resolve(reportRoot, `appium_perf__${this._profileName.replace(/\W/g, '_')}__${Date.now()}${DEFAULT_EXT}`);
|
|
161
148
|
this._pid = opts.pid;
|
|
162
149
|
this._udid = udid;
|
|
163
150
|
this._logger = support_1.logger.getLogger(`${lodash_1.default.truncate(this._profileName, { length: 10 })}@${this._udid.substring(0, 8)}`);
|
|
@@ -166,9 +153,6 @@ class PerfRecorder {
|
|
|
166
153
|
get profileName() {
|
|
167
154
|
return this._profileName;
|
|
168
155
|
}
|
|
169
|
-
async getOriginalReportPath() {
|
|
170
|
-
return (await support_1.fs.exists(this._reportPath)) ? this._reportPath : '';
|
|
171
|
-
}
|
|
172
156
|
async getZippedReportPath() {
|
|
173
157
|
// This is to prevent possible race conditions, because the archive operation
|
|
174
158
|
// could be pretty time-intensive
|
|
@@ -179,13 +163,13 @@ class PerfRecorder {
|
|
|
179
163
|
return '';
|
|
180
164
|
}
|
|
181
165
|
const zippedReportPath = await support_1.tempDir.path({
|
|
182
|
-
prefix:
|
|
166
|
+
prefix: node_path_1.default.parse(originalReportPath).name,
|
|
183
167
|
suffix: '.zip',
|
|
184
168
|
});
|
|
185
169
|
await support_1.zip.toArchive(zippedReportPath, {
|
|
186
|
-
cwd:
|
|
170
|
+
cwd: node_path_1.default.dirname(this._reportPath),
|
|
187
171
|
});
|
|
188
|
-
await support_1.fs.rimraf(
|
|
172
|
+
await support_1.fs.rimraf(node_path_1.default.dirname(this._reportPath));
|
|
189
173
|
this._zippedReportPath = zippedReportPath;
|
|
190
174
|
return this._zippedReportPath;
|
|
191
175
|
})();
|
|
@@ -195,41 +179,6 @@ class PerfRecorder {
|
|
|
195
179
|
isRunning() {
|
|
196
180
|
return !!this._process?.isRunning;
|
|
197
181
|
}
|
|
198
|
-
async _enforceTermination() {
|
|
199
|
-
if (this._process && this.isRunning()) {
|
|
200
|
-
this._logger.debug('Force-stopping the currently running perf recording');
|
|
201
|
-
try {
|
|
202
|
-
await this._process.stop('SIGKILL');
|
|
203
|
-
}
|
|
204
|
-
catch { }
|
|
205
|
-
}
|
|
206
|
-
this._process = null;
|
|
207
|
-
const performCleanup = async () => {
|
|
208
|
-
try {
|
|
209
|
-
await bluebird_1.default.all([this._zippedReportPath, path_1.default.dirname(this._reportPath)]
|
|
210
|
-
.filter(Boolean)
|
|
211
|
-
.map((x) => support_1.fs.rimraf(x)));
|
|
212
|
-
}
|
|
213
|
-
catch (e) {
|
|
214
|
-
this._logger.warn(e.message);
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
|
-
if (this._archivePromise) {
|
|
218
|
-
(async () => {
|
|
219
|
-
try {
|
|
220
|
-
await this._archivePromise;
|
|
221
|
-
}
|
|
222
|
-
catch {
|
|
223
|
-
}
|
|
224
|
-
finally {
|
|
225
|
-
await performCleanup();
|
|
226
|
-
this._archivePromise = null;
|
|
227
|
-
}
|
|
228
|
-
})();
|
|
229
|
-
}
|
|
230
|
-
await performCleanup();
|
|
231
|
-
return '';
|
|
232
|
-
}
|
|
233
182
|
async start() {
|
|
234
183
|
let binaryPath;
|
|
235
184
|
try {
|
|
@@ -241,7 +190,7 @@ class PerfRecorder {
|
|
|
241
190
|
binaryPath = await requireInstruments();
|
|
242
191
|
}
|
|
243
192
|
const args = [];
|
|
244
|
-
const toolName =
|
|
193
|
+
const toolName = node_path_1.default.basename(binaryPath) === XCRUN ? XCTRACE : INSTRUMENTS;
|
|
245
194
|
if (toolName === XCTRACE) {
|
|
246
195
|
args.push(XCTRACE, 'record', '--device', this._udid, '--template', this._profileName, '--output', this._reportPath, '--time-limit', `${this._timeout}ms`);
|
|
247
196
|
if (this._pid) {
|
|
@@ -323,8 +272,69 @@ class PerfRecorder {
|
|
|
323
272
|
}
|
|
324
273
|
return await this.getZippedReportPath();
|
|
325
274
|
}
|
|
275
|
+
async getOriginalReportPath() {
|
|
276
|
+
return (await support_1.fs.exists(this._reportPath)) ? this._reportPath : '';
|
|
277
|
+
}
|
|
278
|
+
async _enforceTermination() {
|
|
279
|
+
if (this._process && this.isRunning()) {
|
|
280
|
+
this._logger.debug('Force-stopping the currently running perf recording');
|
|
281
|
+
try {
|
|
282
|
+
await this._process.stop('SIGKILL');
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
// Ignore errors
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
this._process = null;
|
|
289
|
+
const performCleanup = async () => {
|
|
290
|
+
try {
|
|
291
|
+
await bluebird_1.default.all([this._zippedReportPath, node_path_1.default.dirname(this._reportPath)]
|
|
292
|
+
.filter(Boolean)
|
|
293
|
+
.map((x) => support_1.fs.rimraf(x)));
|
|
294
|
+
}
|
|
295
|
+
catch (e) {
|
|
296
|
+
this._logger.warn(e.message);
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
if (this._archivePromise) {
|
|
300
|
+
(async () => {
|
|
301
|
+
try {
|
|
302
|
+
await this._archivePromise;
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
// Ignore errors
|
|
306
|
+
}
|
|
307
|
+
finally {
|
|
308
|
+
await performCleanup();
|
|
309
|
+
this._archivePromise = null;
|
|
310
|
+
}
|
|
311
|
+
})();
|
|
312
|
+
}
|
|
313
|
+
await performCleanup();
|
|
314
|
+
return '';
|
|
315
|
+
}
|
|
326
316
|
}
|
|
327
317
|
exports.PerfRecorder = PerfRecorder;
|
|
318
|
+
async function requireXctrace() {
|
|
319
|
+
const xcrunPath = await requireXcrun();
|
|
320
|
+
try {
|
|
321
|
+
await (0, teen_process_1.exec)(xcrunPath, [XCTRACE, 'help']);
|
|
322
|
+
}
|
|
323
|
+
catch (e) {
|
|
324
|
+
throw new Error(`${XCTRACE} is not available for the active Xcode version. ` +
|
|
325
|
+
`Please make sure XCode is up to date. Original error: ${e.stderr || e.message}`);
|
|
326
|
+
}
|
|
327
|
+
return xcrunPath;
|
|
328
|
+
}
|
|
329
|
+
async function requireInstruments() {
|
|
330
|
+
try {
|
|
331
|
+
return await support_1.fs.which(INSTRUMENTS);
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
throw new Error(`${INSTRUMENTS} has not been found in PATH. ` +
|
|
335
|
+
`Please make sure XCode development tools are installed`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
328
338
|
async function requireXcrun() {
|
|
329
339
|
try {
|
|
330
340
|
return await support_1.fs.which(XCRUN);
|
|
@@ -334,7 +344,4 @@ async function requireXcrun() {
|
|
|
334
344
|
`Please make sure XCode development tools are installed`);
|
|
335
345
|
}
|
|
336
346
|
}
|
|
337
|
-
/**
|
|
338
|
-
* @typedef {import('../driver').XCUITestDriver} XCUITestDriver
|
|
339
|
-
*/
|
|
340
347
|
//# sourceMappingURL=performance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../lib/commands/performance.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../lib/commands/performance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
import type { XCUITestDriver } from '../driver';
|
|
2
|
+
import type { StartRecordingScreenOptions, StopRecordingScreenOptions } from './types';
|
|
3
|
+
export declare class ScreenRecorder {
|
|
4
|
+
private readonly videoPath;
|
|
5
|
+
private readonly log;
|
|
6
|
+
private readonly opts;
|
|
7
|
+
private readonly udid;
|
|
8
|
+
private mainProcess;
|
|
9
|
+
private timeoutHandler;
|
|
10
|
+
constructor(udid: string, log: any, videoPath: string, opts?: ScreenRecorderOptions);
|
|
11
|
+
start(timeoutMs: number): Promise<void>;
|
|
12
|
+
interrupt(force?: boolean): Promise<boolean>;
|
|
13
|
+
finish(): Promise<string>;
|
|
14
|
+
cleanup(): Promise<void>;
|
|
15
|
+
}
|
|
1
16
|
/**
|
|
2
17
|
* Direct Appium to start recording the device screen
|
|
3
18
|
*
|
|
@@ -7,32 +22,12 @@
|
|
|
7
22
|
* If screen recording has been already started then the command will stop it forcefully and start a new one.
|
|
8
23
|
* The previously recorded video file will be deleted.
|
|
9
24
|
*
|
|
10
|
-
* @param
|
|
11
|
-
* @returns
|
|
25
|
+
* @param options - The available options.
|
|
26
|
+
* @returns Base64-encoded content of the recorded media file if
|
|
12
27
|
* any screen recording is currently running or an empty string.
|
|
13
28
|
* @throws {Error} If screen recording has failed to start.
|
|
14
|
-
* @this {XCUITestDriver}
|
|
15
29
|
*/
|
|
16
|
-
export function startRecordingScreen(this:
|
|
17
|
-
export class startRecordingScreen {
|
|
18
|
-
/**
|
|
19
|
-
* Direct Appium to start recording the device screen
|
|
20
|
-
*
|
|
21
|
-
* Record the display of devices running iOS Simulator since Xcode 9 or real devices since iOS 11
|
|
22
|
-
* (ffmpeg utility is required: 'brew install ffmpeg').
|
|
23
|
-
* It records screen activity to a MPEG-4 file. Audio is not recorded with the video file.
|
|
24
|
-
* If screen recording has been already started then the command will stop it forcefully and start a new one.
|
|
25
|
-
* The previously recorded video file will be deleted.
|
|
26
|
-
*
|
|
27
|
-
* @param {import('./types').StartRecordingScreenOptions} [options] - The available options.
|
|
28
|
-
* @returns {Promise<string>} Base64-encoded content of the recorded media file if
|
|
29
|
-
* any screen recording is currently running or an empty string.
|
|
30
|
-
* @throws {Error} If screen recording has failed to start.
|
|
31
|
-
* @this {XCUITestDriver}
|
|
32
|
-
*/
|
|
33
|
-
constructor(this: import("../driver").XCUITestDriver, options?: import("./types").StartRecordingScreenOptions);
|
|
34
|
-
_recentScreenRecorder: ScreenRecorder;
|
|
35
|
-
}
|
|
30
|
+
export declare function startRecordingScreen(this: XCUITestDriver, options?: StartRecordingScreenOptions): Promise<string>;
|
|
36
31
|
/**
|
|
37
32
|
* Direct Appium to stop screen recording and return the video
|
|
38
33
|
*
|
|
@@ -41,50 +36,23 @@ export class startRecordingScreen {
|
|
|
41
36
|
* active screen recording processes are running then the method returns an
|
|
42
37
|
* empty string.
|
|
43
38
|
*
|
|
44
|
-
* @param
|
|
45
|
-
*
|
|
46
|
-
* @returns {Promise<string?>} Base64-encoded content of the recorded media
|
|
39
|
+
* @param options - The available options.
|
|
40
|
+
* @returns Base64-encoded content of the recorded media
|
|
47
41
|
* file if `remotePath` parameter is empty or null or an empty string.
|
|
48
42
|
* @throws {Error} If there was an error while getting the name of a media
|
|
49
43
|
* file or the file content cannot be uploaded to the remote
|
|
50
44
|
* location.
|
|
51
|
-
* @this {XCUITestDriver}
|
|
52
45
|
*/
|
|
53
|
-
export function stopRecordingScreen(this:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
* @param {import('./types').StopRecordingScreenOptions} options - The available
|
|
64
|
-
* options.
|
|
65
|
-
* @returns {Promise<string?>} Base64-encoded content of the recorded media
|
|
66
|
-
* file if `remotePath` parameter is empty or null or an empty string.
|
|
67
|
-
* @throws {Error} If there was an error while getting the name of a media
|
|
68
|
-
* file or the file content cannot be uploaded to the remote
|
|
69
|
-
* location.
|
|
70
|
-
* @this {XCUITestDriver}
|
|
71
|
-
*/
|
|
72
|
-
constructor(this: import("../driver").XCUITestDriver, options?: import("./types").StopRecordingScreenOptions);
|
|
73
|
-
_recentScreenRecorder: any;
|
|
74
|
-
}
|
|
75
|
-
export class ScreenRecorder {
|
|
76
|
-
constructor(udid: any, log: any, videoPath: any, opts?: {});
|
|
77
|
-
videoPath: any;
|
|
78
|
-
log: any;
|
|
79
|
-
opts: {};
|
|
80
|
-
udid: any;
|
|
81
|
-
mainProcess: SubProcess<import("teen_process").SubProcessOptions> | null;
|
|
82
|
-
timeoutHandler: NodeJS.Timeout | null;
|
|
83
|
-
start(timeoutMs: any): Promise<void>;
|
|
84
|
-
interrupt(force?: boolean): Promise<boolean>;
|
|
85
|
-
finish(): Promise<any>;
|
|
86
|
-
cleanup(): Promise<void>;
|
|
46
|
+
export declare function stopRecordingScreen(this: XCUITestDriver, options?: StopRecordingScreenOptions): Promise<string | null>;
|
|
47
|
+
interface ScreenRecorderOptions {
|
|
48
|
+
hardwareAcceleration?: string;
|
|
49
|
+
remotePort?: number;
|
|
50
|
+
remoteUrl?: string;
|
|
51
|
+
videoFps?: number;
|
|
52
|
+
videoType?: string;
|
|
53
|
+
videoScale?: string;
|
|
54
|
+
videoFilters?: string;
|
|
55
|
+
pixelFormat?: string;
|
|
87
56
|
}
|
|
88
|
-
export
|
|
89
|
-
import { SubProcess } from 'teen_process';
|
|
57
|
+
export {};
|
|
90
58
|
//# sourceMappingURL=recordscreen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordscreen.d.ts","sourceRoot":"","sources":["../../../lib/commands/recordscreen.
|
|
1
|
+
{"version":3,"file":"recordscreen.d.ts","sourceRoot":"","sources":["../../../lib/commands/recordscreen.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAC,2BAA2B,EAAE,0BAA0B,EAAC,MAAM,SAAS,CAAC;AAwErF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAwB;gBAElC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B;IASjF,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+GvC,SAAS,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB1C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,MAAM,CAAC,CAyGjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAED,UAAU,qBAAqB;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -60,18 +60,24 @@ const HARDWARE_ACCELERATION_PARAMETERS = {
|
|
|
60
60
|
hwaccel: 'qsv',
|
|
61
61
|
hwaccelOutputFormat: '',
|
|
62
62
|
scaleFilterHWAccel: 'scale_qsv',
|
|
63
|
-
videoTypeHWAccel: 'h264_qsv'
|
|
63
|
+
videoTypeHWAccel: 'h264_qsv',
|
|
64
64
|
},
|
|
65
65
|
/* https://trac.ffmpeg.org/wiki/Hardware/VAAPI */
|
|
66
66
|
vaapi: {
|
|
67
67
|
hwaccel: 'vaapi',
|
|
68
68
|
hwaccelOutputFormat: 'vaapi',
|
|
69
69
|
scaleFilterHWAccel: 'scale_vaapi',
|
|
70
|
-
videoTypeHWAccel: 'h264_vaapi'
|
|
71
|
-
}
|
|
70
|
+
videoTypeHWAccel: 'h264_vaapi',
|
|
71
|
+
},
|
|
72
72
|
};
|
|
73
73
|
const CAPTURE_START_MARKER = /^\s*frame=/;
|
|
74
74
|
class ScreenRecorder {
|
|
75
|
+
videoPath;
|
|
76
|
+
log;
|
|
77
|
+
opts;
|
|
78
|
+
udid;
|
|
79
|
+
mainProcess;
|
|
80
|
+
timeoutHandler;
|
|
75
81
|
constructor(udid, log, videoPath, opts = {}) {
|
|
76
82
|
this.videoPath = videoPath;
|
|
77
83
|
this.log = log;
|
|
@@ -102,7 +108,7 @@ class ScreenRecorder {
|
|
|
102
108
|
'-reconnect_delay_max',
|
|
103
109
|
`${timeoutMs / 1000 + 1}`,
|
|
104
110
|
];
|
|
105
|
-
const { hwaccel, hwaccelOutputFormat, scaleFilterHWAccel, videoTypeHWAccel } = HARDWARE_ACCELERATION_PARAMETERS[hardwareAcceleration] ?? {};
|
|
111
|
+
const { hwaccel, hwaccelOutputFormat, scaleFilterHWAccel, videoTypeHWAccel, } = HARDWARE_ACCELERATION_PARAMETERS[hardwareAcceleration || ''] ?? {};
|
|
106
112
|
if (hwaccel) {
|
|
107
113
|
args.push('-hwaccel', hwaccel);
|
|
108
114
|
}
|
|
@@ -110,10 +116,10 @@ class ScreenRecorder {
|
|
|
110
116
|
args.push('-hwaccel_output_format', hwaccelOutputFormat);
|
|
111
117
|
}
|
|
112
118
|
//Parameter `-r` is optional. See details: https://github.com/appium/appium/issues/12067
|
|
113
|
-
if (videoFps && videoType === 'libx264' || videoTypeHWAccel) {
|
|
114
|
-
args.push('-r', videoFps);
|
|
119
|
+
if ((videoFps && videoType === 'libx264') || videoTypeHWAccel) {
|
|
120
|
+
args.push('-r', String(videoFps));
|
|
115
121
|
}
|
|
116
|
-
const { protocol, hostname } = url_1.default.parse(remoteUrl);
|
|
122
|
+
const { protocol, hostname } = url_1.default.parse(remoteUrl || '');
|
|
117
123
|
args.push('-i', `${protocol}//${hostname}:${remotePort}`);
|
|
118
124
|
if (videoFilters || videoScale) {
|
|
119
125
|
args.push('-vf', videoFilters || `${scaleFilterHWAccel || 'scale'}=${videoScale}`);
|
|
@@ -122,7 +128,7 @@ class ScreenRecorder {
|
|
|
122
128
|
if (pixelFormat) {
|
|
123
129
|
args.push('-pix_fmt', pixelFormat);
|
|
124
130
|
}
|
|
125
|
-
args.push('-vcodec', videoTypeHWAccel || videoType);
|
|
131
|
+
args.push('-vcodec', videoTypeHWAccel || videoType || DEFAULT_VCODEC);
|
|
126
132
|
args.push('-y');
|
|
127
133
|
args.push(this.videoPath);
|
|
128
134
|
this.mainProcess = new teen_process_1.SubProcess(FFMPEG_BINARY, args);
|
|
@@ -152,7 +158,8 @@ class ScreenRecorder {
|
|
|
152
158
|
throw new Error(`The screen capture process '${FFMPEG_BINARY}' died unexpectedly. ` +
|
|
153
159
|
`Check server logs for more details`);
|
|
154
160
|
}
|
|
155
|
-
this.log.info(`Starting screen capture on the device '${this.udid}' with command: '${FFMPEG_BINARY} ${args.join(' ')}'. ` +
|
|
161
|
+
this.log.info(`Starting screen capture on the device '${this.udid}' with command: '${FFMPEG_BINARY} ${args.join(' ')}'. ` +
|
|
162
|
+
`Will timeout in ${timeoutMs}ms`);
|
|
156
163
|
this.timeoutHandler = setTimeout(async () => {
|
|
157
164
|
if (!(await this.interrupt())) {
|
|
158
165
|
this.log.warn(`Cannot finish the active screen recording on the device '${this.udid}' after ${timeoutMs}ms timeout`);
|
|
@@ -199,14 +206,13 @@ exports.ScreenRecorder = ScreenRecorder;
|
|
|
199
206
|
* If screen recording has been already started then the command will stop it forcefully and start a new one.
|
|
200
207
|
* The previously recorded video file will be deleted.
|
|
201
208
|
*
|
|
202
|
-
* @param
|
|
203
|
-
* @returns
|
|
209
|
+
* @param options - The available options.
|
|
210
|
+
* @returns Base64-encoded content of the recorded media file if
|
|
204
211
|
* any screen recording is currently running or an empty string.
|
|
205
212
|
* @throws {Error} If screen recording has failed to start.
|
|
206
|
-
* @this {XCUITestDriver}
|
|
207
213
|
*/
|
|
208
214
|
async function startRecordingScreen(options = {}) {
|
|
209
|
-
const { videoType = DEFAULT_VCODEC, timeLimit = DEFAULT_RECORDING_TIME_SEC, videoQuality = DEFAULT_QUALITY, videoFps = DEFAULT_FPS, videoFilters, videoScale, forceRestart, pixelFormat, hardwareAcceleration } = options;
|
|
215
|
+
const { videoType = DEFAULT_VCODEC, timeLimit = DEFAULT_RECORDING_TIME_SEC, videoQuality = DEFAULT_QUALITY, videoFps = DEFAULT_FPS, videoFilters, videoScale, forceRestart, pixelFormat, hardwareAcceleration, } = options;
|
|
210
216
|
let result = '';
|
|
211
217
|
if (!forceRestart) {
|
|
212
218
|
this.log.info(`Checking if there is/was a previous screen recording. ` +
|
|
@@ -215,7 +221,7 @@ async function startRecordingScreen(options = {}) {
|
|
|
215
221
|
}
|
|
216
222
|
const videoPath = await support_1.tempDir.path({
|
|
217
223
|
prefix: `appium_${Math.random().toString(16).substring(2, 8)}`,
|
|
218
|
-
suffix: MP4_EXT
|
|
224
|
+
suffix: MP4_EXT,
|
|
219
225
|
});
|
|
220
226
|
const wdaBaseUrl = this.opts.wdaBaseUrl || appium_webdriveragent_1.WDA_BASE_URL;
|
|
221
227
|
const screenRecorder = new ScreenRecorder(this.device.udid, this.log, videoPath, {
|
|
@@ -224,9 +230,9 @@ async function startRecordingScreen(options = {}) {
|
|
|
224
230
|
videoType,
|
|
225
231
|
videoFilters,
|
|
226
232
|
videoScale,
|
|
227
|
-
videoFps,
|
|
233
|
+
videoFps: typeof videoFps === 'string' ? parseInt(videoFps, 10) : videoFps,
|
|
228
234
|
pixelFormat,
|
|
229
|
-
hardwareAcceleration
|
|
235
|
+
hardwareAcceleration,
|
|
230
236
|
});
|
|
231
237
|
if (!(await screenRecorder.interrupt(true))) {
|
|
232
238
|
throw this.log.errorWithException('Unable to stop screen recording process');
|
|
@@ -240,8 +246,7 @@ async function startRecordingScreen(options = {}) {
|
|
|
240
246
|
throw this.log.errorWithException(`The timeLimit value must be in range [1, ${MAX_RECORDING_TIME_SEC}] seconds. ` +
|
|
241
247
|
`The value of '${timeLimit}' has been passed instead.`);
|
|
242
248
|
}
|
|
243
|
-
let { mjpegServerScreenshotQuality, mjpegServerFramerate } =
|
|
244
|
-
/** @type {import('appium-webdriveragent').WDASettings} */ (await this.proxyCommand('/appium/settings', 'GET'));
|
|
249
|
+
let { mjpegServerScreenshotQuality, mjpegServerFramerate } = (await this.proxyCommand('/appium/settings', 'GET'));
|
|
245
250
|
if (videoQuality) {
|
|
246
251
|
const quality = lodash_1.default.isInteger(videoQuality)
|
|
247
252
|
? videoQuality
|
|
@@ -249,7 +254,8 @@ async function startRecordingScreen(options = {}) {
|
|
|
249
254
|
if (!quality) {
|
|
250
255
|
throw new Error(`videoQuality value should be one of ${JSON.stringify(lodash_1.default.keys(QUALITY_MAPPING))} or a number in range 1..100. ` + `'${videoQuality}' is given instead`);
|
|
251
256
|
}
|
|
252
|
-
mjpegServerScreenshotQuality =
|
|
257
|
+
mjpegServerScreenshotQuality =
|
|
258
|
+
mjpegServerScreenshotQuality !== quality ? quality : undefined;
|
|
253
259
|
}
|
|
254
260
|
else {
|
|
255
261
|
mjpegServerScreenshotQuality = undefined;
|
|
@@ -269,8 +275,8 @@ async function startRecordingScreen(options = {}) {
|
|
|
269
275
|
await this.proxyCommand('/appium/settings', 'POST', {
|
|
270
276
|
settings: {
|
|
271
277
|
mjpegServerScreenshotQuality,
|
|
272
|
-
mjpegServerFramerate
|
|
273
|
-
}
|
|
278
|
+
mjpegServerFramerate,
|
|
279
|
+
},
|
|
274
280
|
});
|
|
275
281
|
}
|
|
276
282
|
try {
|
|
@@ -292,14 +298,12 @@ async function startRecordingScreen(options = {}) {
|
|
|
292
298
|
* active screen recording processes are running then the method returns an
|
|
293
299
|
* empty string.
|
|
294
300
|
*
|
|
295
|
-
* @param
|
|
296
|
-
*
|
|
297
|
-
* @returns {Promise<string?>} Base64-encoded content of the recorded media
|
|
301
|
+
* @param options - The available options.
|
|
302
|
+
* @returns Base64-encoded content of the recorded media
|
|
298
303
|
* file if `remotePath` parameter is empty or null or an empty string.
|
|
299
304
|
* @throws {Error} If there was an error while getting the name of a media
|
|
300
305
|
* file or the file content cannot be uploaded to the remote
|
|
301
306
|
* location.
|
|
302
|
-
* @this {XCUITestDriver}
|
|
303
307
|
*/
|
|
304
308
|
async function stopRecordingScreen(options = {}) {
|
|
305
309
|
if (!this._recentScreenRecorder) {
|
|
@@ -320,7 +324,4 @@ async function stopRecordingScreen(options = {}) {
|
|
|
320
324
|
this._recentScreenRecorder = null;
|
|
321
325
|
}
|
|
322
326
|
}
|
|
323
|
-
/**
|
|
324
|
-
* @typedef {import('../driver').XCUITestDriver} XCUITestDriver
|
|
325
|
-
*/
|
|
326
327
|
//# sourceMappingURL=recordscreen.js.map
|