appium-xcuitest-driver 7.21.2 → 7.22.1
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/context.js +2 -2
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/commands/log.d.ts.map +1 -1
- package/build/lib/commands/log.js +27 -14
- package/build/lib/commands/log.js.map +1 -1
- package/build/lib/commands/pcap.d.ts.map +1 -1
- package/build/lib/commands/pcap.js +1 -5
- package/build/lib/commands/pcap.js.map +1 -1
- package/build/lib/commands/performance.d.ts.map +1 -1
- package/build/lib/commands/performance.js +3 -5
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/recordscreen.d.ts.map +1 -1
- package/build/lib/commands/recordscreen.js +8 -9
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/device-log/helpers.d.ts +4 -1
- package/build/lib/device-log/helpers.d.ts.map +1 -1
- package/build/lib/device-log/helpers.js +6 -2
- package/build/lib/device-log/helpers.js.map +1 -1
- package/build/lib/device-log/ios-crash-log.d.ts +0 -4
- package/build/lib/device-log/ios-crash-log.d.ts.map +1 -1
- package/build/lib/device-log/ios-crash-log.js +0 -8
- package/build/lib/device-log/ios-crash-log.js.map +1 -1
- package/build/lib/device-log/ios-device-log.d.ts +3 -3
- package/build/lib/device-log/ios-device-log.d.ts.map +1 -1
- package/build/lib/device-log/ios-log.d.ts +1 -3
- package/build/lib/device-log/ios-log.d.ts.map +1 -1
- package/build/lib/device-log/ios-log.js +12 -27
- package/build/lib/device-log/ios-log.js.map +1 -1
- package/build/lib/device-log/ios-performance-log.d.ts +4 -8
- package/build/lib/device-log/ios-performance-log.d.ts.map +1 -1
- package/build/lib/device-log/ios-performance-log.js +9 -16
- package/build/lib/device-log/ios-performance-log.js.map +1 -1
- package/build/lib/device-log/ios-simulator-log.d.ts +4 -4
- package/build/lib/device-log/ios-simulator-log.d.ts.map +1 -1
- package/build/lib/device-log/ios-simulator-log.js +4 -6
- package/build/lib/device-log/ios-simulator-log.js.map +1 -1
- package/build/lib/device-log/safari-console-log.d.ts +65 -6
- package/build/lib/device-log/safari-console-log.d.ts.map +1 -1
- package/build/lib/device-log/safari-console-log.js +61 -81
- package/build/lib/device-log/safari-console-log.js.map +1 -1
- package/build/lib/device-log/safari-network-log.d.ts +36 -8
- package/build/lib/device-log/safari-network-log.d.ts.map +1 -1
- package/build/lib/device-log/safari-network-log.js +28 -151
- package/build/lib/device-log/safari-network-log.js.map +1 -1
- package/build/lib/driver.d.ts.map +1 -1
- package/lib/commands/context.js +2 -2
- package/lib/commands/log.js +32 -14
- package/lib/commands/pcap.js +1 -5
- package/lib/commands/performance.js +3 -5
- package/lib/commands/recordscreen.js +7 -8
- package/lib/device-log/helpers.ts +6 -2
- package/lib/device-log/ios-crash-log.js +0 -9
- package/lib/device-log/ios-device-log.ts +3 -3
- package/lib/device-log/ios-log.ts +16 -33
- package/lib/device-log/ios-performance-log.ts +11 -22
- package/lib/device-log/ios-simulator-log.ts +9 -11
- package/lib/device-log/safari-console-log.ts +112 -0
- package/lib/device-log/safari-network-log.ts +80 -0
- package/npm-shrinkwrap.json +69 -24
- package/package.json +2 -2
- package/build/lib/device-log/rotating-log.d.ts +0 -21
- package/build/lib/device-log/rotating-log.d.ts.map +0 -1
- package/build/lib/device-log/rotating-log.js +0 -61
- package/build/lib/device-log/rotating-log.js.map +0 -1
- package/lib/device-log/rotating-log.js +0 -65
- package/lib/device-log/safari-console-log.js +0 -96
- package/lib/device-log/safari-network-log.js +0 -193
|
@@ -12,13 +12,13 @@ export interface IOSSimulatorLogOptions {
|
|
|
12
12
|
sim: Simulator;
|
|
13
13
|
showLogs?: boolean;
|
|
14
14
|
iosSimulatorLogsPredicate?: string;
|
|
15
|
-
log
|
|
15
|
+
log: AppiumLogger;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export class IOSSimulatorLog extends LineConsumingLog {
|
|
19
|
-
private sim: Simulator;
|
|
20
|
-
private showLogs: boolean;
|
|
21
|
-
private predicate?: string;
|
|
19
|
+
private readonly sim: Simulator;
|
|
20
|
+
private readonly showLogs: boolean;
|
|
21
|
+
private readonly predicate?: string;
|
|
22
22
|
private proc: SubProcess | null;
|
|
23
23
|
|
|
24
24
|
constructor(opts: IOSSimulatorLogOptions) {
|
|
@@ -93,24 +93,22 @@ export class IOSSimulatorLog extends LineConsumingLog {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
private async finishStartingLogCapture() {
|
|
96
|
+
private async finishStartingLogCapture(): Promise<void> {
|
|
97
97
|
if (!this.proc) {
|
|
98
98
|
throw this.log.errorWithException('Could not capture simulator log');
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
for (const streamName of ['stdout', 'stderr']) {
|
|
102
|
-
this.proc.on(`
|
|
103
|
-
|
|
104
|
-
this.onOutput(line, ...(streamName === 'stderr' ? ['STDERR'] : []));
|
|
105
|
-
}
|
|
102
|
+
this.proc.on(`line-${streamName}`, (line: string) => {
|
|
103
|
+
this.onOutput(line, ...(streamName === 'stderr' ? ['STDERR'] : []));
|
|
106
104
|
});
|
|
107
105
|
}
|
|
108
106
|
|
|
109
|
-
const startDetector = (
|
|
107
|
+
const startDetector = (stdout: string, stderr: string) => {
|
|
110
108
|
if (EXECVP_ERROR_PATTERN.test(stderr)) {
|
|
111
109
|
throw new Error('iOS log capture process failed to start');
|
|
112
110
|
}
|
|
113
|
-
return stdout || stderr;
|
|
111
|
+
return Boolean(stdout || stderr);
|
|
114
112
|
};
|
|
115
113
|
await this.proc.start(startDetector, START_TIMEOUT);
|
|
116
114
|
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import type { AppiumLogger } from '@appium/types';
|
|
3
|
+
import {
|
|
4
|
+
toLogEntry,
|
|
5
|
+
DEFAULT_LOG_LEVEL,
|
|
6
|
+
MAX_JSON_LOG_LENGTH,
|
|
7
|
+
MAX_BUFFERED_EVENTS_COUNT
|
|
8
|
+
} from './helpers';
|
|
9
|
+
import IOSLog from './ios-log';
|
|
10
|
+
import type { LogEntry } from '../commands/types';
|
|
11
|
+
|
|
12
|
+
const LOG_LEVELS_MAP = {
|
|
13
|
+
error: 'SEVERE',
|
|
14
|
+
warning: 'WARNING',
|
|
15
|
+
log: 'FINE',
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export interface SafariConsoleLogOptions {
|
|
19
|
+
showLogs: boolean;
|
|
20
|
+
log: AppiumLogger;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface SafariConsoleStacktraceEntry {
|
|
24
|
+
functionName: string;
|
|
25
|
+
url: string;
|
|
26
|
+
scriptId: number;
|
|
27
|
+
lineNumber: number;
|
|
28
|
+
columnNumber: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface SafariConsoleEntry {
|
|
32
|
+
source: string;
|
|
33
|
+
level: string;
|
|
34
|
+
text: string;
|
|
35
|
+
type: string;
|
|
36
|
+
line: number;
|
|
37
|
+
column: number;
|
|
38
|
+
url?: string;
|
|
39
|
+
repeatCount: number;
|
|
40
|
+
stackTrace: SafariConsoleStacktraceEntry[];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
type TSerializedEntry = [SafariConsoleEntry, number];
|
|
44
|
+
|
|
45
|
+
export class SafariConsoleLog extends IOSLog<SafariConsoleEntry, TSerializedEntry> {
|
|
46
|
+
private readonly _showLogs: boolean;
|
|
47
|
+
|
|
48
|
+
constructor(opts: SafariConsoleLogOptions) {
|
|
49
|
+
super({
|
|
50
|
+
log: opts.log,
|
|
51
|
+
maxBufferSize: MAX_BUFFERED_EVENTS_COUNT,
|
|
52
|
+
});
|
|
53
|
+
this._showLogs = opts.showLogs;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
override async startCapture(): Promise<void> {}
|
|
57
|
+
override async stopCapture(): Promise<void> {}
|
|
58
|
+
override get isCapturing(): boolean {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
*
|
|
64
|
+
* @param err
|
|
65
|
+
* @param entry The output will be like:
|
|
66
|
+
* {
|
|
67
|
+
* "source": "javascript",
|
|
68
|
+
* "level":"error",
|
|
69
|
+
* "text":"ReferenceError: Can't find variable: s_account",
|
|
70
|
+
* "type":"log",
|
|
71
|
+
* "line":2,
|
|
72
|
+
* "column":21,
|
|
73
|
+
* "url":"https://assets.adobedtm.com/b46e318d845250834eda10c5a20827c045a4d76f/scripts/satellite-57866f8b64746d53a8000104-staging.js",
|
|
74
|
+
* "repeatCount":1,
|
|
75
|
+
* "stackTrace":[{
|
|
76
|
+
* "functionName":"global code",
|
|
77
|
+
* "url":"https://assets.adobedtm.com/b46e318d845250834eda10c5a20827c045a4d76f/scripts/satellite-57866f8b64746d53a8000104-staging.js",
|
|
78
|
+
* "scriptId":"6",
|
|
79
|
+
* "lineNumber":2,
|
|
80
|
+
* "columnNumber":21
|
|
81
|
+
* }]
|
|
82
|
+
* }
|
|
83
|
+
*
|
|
84
|
+
* we need, at least, `level` (in accordance with Java levels
|
|
85
|
+
* (https://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html)),
|
|
86
|
+
* `timestamp`, and `message` to satisfy the java client. In order to
|
|
87
|
+
* provide all the information to the client, `message` is the full
|
|
88
|
+
* object, stringified.
|
|
89
|
+
*
|
|
90
|
+
*/
|
|
91
|
+
onConsoleLogEvent(err: object | null, entry: SafariConsoleEntry): void {
|
|
92
|
+
this.broadcast(entry);
|
|
93
|
+
if (this._showLogs) {
|
|
94
|
+
this.log.info(`[SafariConsole] ${_.truncate(JSON.stringify(entry), {length: MAX_JSON_LOG_LENGTH})}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
protected override _serializeEntry(value: SafariConsoleEntry): TSerializedEntry {
|
|
99
|
+
return [value, Date.now()];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
protected override _deserializeEntry(value: TSerializedEntry): LogEntry {
|
|
103
|
+
const [entry, timestamp] = value;
|
|
104
|
+
return toLogEntry(JSON.stringify(entry), timestamp, mapLogLevel(entry.level));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function mapLogLevel(originalLevel: string): string {
|
|
109
|
+
return LOG_LEVELS_MAP[originalLevel] ?? DEFAULT_LOG_LEVEL;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export default SafariConsoleLog;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { LineConsumingLog } from './line-consuming-log';
|
|
3
|
+
import { MAX_JSON_LOG_LENGTH, MAX_BUFFERED_EVENTS_COUNT } from './helpers';
|
|
4
|
+
import type { AppiumLogger } from '@appium/types';
|
|
5
|
+
|
|
6
|
+
const EVENTS_TO_LOG = [
|
|
7
|
+
'Network.loadingFinished',
|
|
8
|
+
'Network.loadingFailed',
|
|
9
|
+
];
|
|
10
|
+
const MONITORED_EVENTS = [
|
|
11
|
+
'Network.requestWillBeSent',
|
|
12
|
+
'Network.responseReceived',
|
|
13
|
+
...EVENTS_TO_LOG,
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
export interface SafariConsoleLogOptions {
|
|
17
|
+
showLogs: boolean;
|
|
18
|
+
log: AppiumLogger;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface SafariNetworkResponseTiming {
|
|
22
|
+
responseStart: number;
|
|
23
|
+
receiveHeadersEnd: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface SafariNetworkResponse {
|
|
27
|
+
url: string;
|
|
28
|
+
status: number;
|
|
29
|
+
timing: SafariNetworkResponseTiming;
|
|
30
|
+
source: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface SafariNetworkLogEntryMetrics {
|
|
34
|
+
responseBodyBytesReceived: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface SafariNetworkLogEntry {
|
|
38
|
+
requestId: string;
|
|
39
|
+
response?: SafariNetworkResponse;
|
|
40
|
+
type?: string;
|
|
41
|
+
initiator?: string;
|
|
42
|
+
// Safari has a `metrics` object on it's `Network.loadingFinished` event
|
|
43
|
+
metrics?: SafariNetworkLogEntryMetrics;
|
|
44
|
+
errorText?: string;
|
|
45
|
+
// When a network call is cancelled, Safari returns `cancelled` as error text
|
|
46
|
+
// but has a boolean `canceled`.
|
|
47
|
+
canceled?: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export class SafariNetworkLog extends LineConsumingLog {
|
|
51
|
+
private readonly _showLogs: boolean;
|
|
52
|
+
|
|
53
|
+
constructor(opts: SafariConsoleLogOptions) {
|
|
54
|
+
super({
|
|
55
|
+
log: opts.log,
|
|
56
|
+
maxBufferSize: MAX_BUFFERED_EVENTS_COUNT,
|
|
57
|
+
});
|
|
58
|
+
this._showLogs = opts.showLogs;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
override async startCapture(): Promise<void> {}
|
|
62
|
+
override async stopCapture(): Promise<void> {}
|
|
63
|
+
override get isCapturing(): boolean {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
onNetworkEvent(method: string, entry: SafariNetworkLogEntry): void {
|
|
68
|
+
if (!MONITORED_EVENTS.includes(method)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const serializedEntry = JSON.stringify(entry);
|
|
73
|
+
this.broadcast(serializedEntry);
|
|
74
|
+
if (this._showLogs && EVENTS_TO_LOG.includes(method)) {
|
|
75
|
+
this.log.info(`[SafariNetwork] ${_.truncate(serializedEntry, {length: MAX_JSON_LOG_LENGTH})}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export default SafariNetworkLog;
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-xcuitest-driver",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.22.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-xcuitest-driver",
|
|
9
|
-
"version": "7.
|
|
9
|
+
"version": "7.22.1",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@colors/colors": "^1.6.0",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"portscanner": "^2.2.0",
|
|
31
31
|
"semver": "^7.5.4",
|
|
32
32
|
"source-map-support": "^0.x",
|
|
33
|
-
"teen_process": "^2.
|
|
33
|
+
"teen_process": "^2.2.0",
|
|
34
34
|
"ws": "^8.13.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
@@ -113,6 +113,17 @@
|
|
|
113
113
|
"spdy": "4.0.2"
|
|
114
114
|
}
|
|
115
115
|
},
|
|
116
|
+
"node_modules/@appium/base-driver/node_modules/type-fest": {
|
|
117
|
+
"version": "4.20.1",
|
|
118
|
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
|
|
119
|
+
"integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
|
|
120
|
+
"engines": {
|
|
121
|
+
"node": ">=16"
|
|
122
|
+
},
|
|
123
|
+
"funding": {
|
|
124
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
125
|
+
}
|
|
126
|
+
},
|
|
116
127
|
"node_modules/@appium/docutils": {
|
|
117
128
|
"version": "1.0.17",
|
|
118
129
|
"resolved": "https://registry.npmjs.org/@appium/docutils/-/docutils-1.0.17.tgz",
|
|
@@ -162,6 +173,29 @@
|
|
|
162
173
|
"npm": ">=8"
|
|
163
174
|
}
|
|
164
175
|
},
|
|
176
|
+
"node_modules/@appium/docutils/node_modules/type-fest": {
|
|
177
|
+
"version": "4.20.1",
|
|
178
|
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
|
|
179
|
+
"integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
|
|
180
|
+
"engines": {
|
|
181
|
+
"node": ">=16"
|
|
182
|
+
},
|
|
183
|
+
"funding": {
|
|
184
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"node_modules/@appium/docutils/node_modules/typescript": {
|
|
188
|
+
"version": "5.5.2",
|
|
189
|
+
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz",
|
|
190
|
+
"integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==",
|
|
191
|
+
"bin": {
|
|
192
|
+
"tsc": "bin/tsc",
|
|
193
|
+
"tsserver": "bin/tsserver"
|
|
194
|
+
},
|
|
195
|
+
"engines": {
|
|
196
|
+
"node": ">=14.17"
|
|
197
|
+
}
|
|
198
|
+
},
|
|
165
199
|
"node_modules/@appium/logger": {
|
|
166
200
|
"version": "1.5.0",
|
|
167
201
|
"resolved": "https://registry.npmjs.org/@appium/logger/-/logger-1.5.0.tgz",
|
|
@@ -284,6 +318,17 @@
|
|
|
284
318
|
"npm": ">=8"
|
|
285
319
|
}
|
|
286
320
|
},
|
|
321
|
+
"node_modules/@appium/support/node_modules/type-fest": {
|
|
322
|
+
"version": "4.20.1",
|
|
323
|
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
|
|
324
|
+
"integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
|
|
325
|
+
"engines": {
|
|
326
|
+
"node": ">=16"
|
|
327
|
+
},
|
|
328
|
+
"funding": {
|
|
329
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
330
|
+
}
|
|
331
|
+
},
|
|
287
332
|
"node_modules/@appium/tsconfig": {
|
|
288
333
|
"version": "0.3.3",
|
|
289
334
|
"resolved": "https://registry.npmjs.org/@appium/tsconfig/-/tsconfig-0.3.3.tgz",
|
|
@@ -313,6 +358,17 @@
|
|
|
313
358
|
"npm": ">=8"
|
|
314
359
|
}
|
|
315
360
|
},
|
|
361
|
+
"node_modules/@appium/types/node_modules/type-fest": {
|
|
362
|
+
"version": "4.20.1",
|
|
363
|
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
|
|
364
|
+
"integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
|
|
365
|
+
"engines": {
|
|
366
|
+
"node": ">=16"
|
|
367
|
+
},
|
|
368
|
+
"funding": {
|
|
369
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
370
|
+
}
|
|
371
|
+
},
|
|
316
372
|
"node_modules/@babel/code-frame": {
|
|
317
373
|
"version": "7.24.7",
|
|
318
374
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
|
|
@@ -923,9 +979,9 @@
|
|
|
923
979
|
}
|
|
924
980
|
},
|
|
925
981
|
"node_modules/appium-webdriveragent": {
|
|
926
|
-
"version": "8.7.
|
|
927
|
-
"resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-8.7.
|
|
928
|
-
"integrity": "sha512-
|
|
982
|
+
"version": "8.7.6",
|
|
983
|
+
"resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-8.7.6.tgz",
|
|
984
|
+
"integrity": "sha512-TrpMaiDlrtHISpF3J1At/a0Bsd8stR4B0YYXYqe8pfmsG9F9n/c2X+o44vnm6+Kt7imcxo9fhpIbn76/jI3Tpg==",
|
|
929
985
|
"dependencies": {
|
|
930
986
|
"@appium/base-driver": "^9.0.0",
|
|
931
987
|
"@appium/strongbox": "^0.x",
|
|
@@ -938,7 +994,7 @@
|
|
|
938
994
|
"bluebird": "^3.5.5",
|
|
939
995
|
"lodash": "^4.17.11",
|
|
940
996
|
"source-map-support": "^0.x",
|
|
941
|
-
"teen_process": "^2.
|
|
997
|
+
"teen_process": "^2.2.0"
|
|
942
998
|
},
|
|
943
999
|
"engines": {
|
|
944
1000
|
"node": ">=14",
|
|
@@ -3742,9 +3798,9 @@
|
|
|
3742
3798
|
}
|
|
3743
3799
|
},
|
|
3744
3800
|
"node_modules/teen_process": {
|
|
3745
|
-
"version": "2.
|
|
3746
|
-
"resolved": "https://registry.npmjs.org/teen_process/-/teen_process-2.
|
|
3747
|
-
"integrity": "sha512-
|
|
3801
|
+
"version": "2.2.0",
|
|
3802
|
+
"resolved": "https://registry.npmjs.org/teen_process/-/teen_process-2.2.0.tgz",
|
|
3803
|
+
"integrity": "sha512-YYHdMnRGAMXrP+KmUH3/WBelsR+OZUfdqCZEXHfhN/2Bn2eTVP11NyB4FeMOjlmtZB/Y5CiZnRKQqu2lJzzlVw==",
|
|
3748
3804
|
"dependencies": {
|
|
3749
3805
|
"bluebird": "^3.7.2",
|
|
3750
3806
|
"lodash": "^4.17.21",
|
|
@@ -3790,17 +3846,6 @@
|
|
|
3790
3846
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
|
|
3791
3847
|
"integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
|
|
3792
3848
|
},
|
|
3793
|
-
"node_modules/type-fest": {
|
|
3794
|
-
"version": "4.20.1",
|
|
3795
|
-
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
|
|
3796
|
-
"integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
|
|
3797
|
-
"engines": {
|
|
3798
|
-
"node": ">=16"
|
|
3799
|
-
},
|
|
3800
|
-
"funding": {
|
|
3801
|
-
"url": "https://github.com/sponsors/sindresorhus"
|
|
3802
|
-
}
|
|
3803
|
-
},
|
|
3804
3849
|
"node_modules/type-is": {
|
|
3805
3850
|
"version": "1.6.18",
|
|
3806
3851
|
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
|
@@ -3814,9 +3859,9 @@
|
|
|
3814
3859
|
}
|
|
3815
3860
|
},
|
|
3816
3861
|
"node_modules/typescript": {
|
|
3817
|
-
"version": "5.5.
|
|
3818
|
-
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.
|
|
3819
|
-
"integrity": "sha512
|
|
3862
|
+
"version": "5.5.3",
|
|
3863
|
+
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
|
|
3864
|
+
"integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
|
|
3820
3865
|
"bin": {
|
|
3821
3866
|
"tsc": "bin/tsc",
|
|
3822
3867
|
"tsserver": "bin/tsserver"
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"xcuitest",
|
|
9
9
|
"xctest"
|
|
10
10
|
],
|
|
11
|
-
"version": "7.
|
|
11
|
+
"version": "7.22.1",
|
|
12
12
|
"author": "Appium Contributors",
|
|
13
13
|
"license": "Apache-2.0",
|
|
14
14
|
"repository": {
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"portscanner": "^2.2.0",
|
|
98
98
|
"semver": "^7.5.4",
|
|
99
99
|
"source-map-support": "^0.x",
|
|
100
|
-
"teen_process": "^2.
|
|
100
|
+
"teen_process": "^2.2.0",
|
|
101
101
|
"ws": "^8.13.0"
|
|
102
102
|
},
|
|
103
103
|
"scripts": {
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export default RotatingLog;
|
|
2
|
-
export class RotatingLog {
|
|
3
|
-
constructor(showLogs?: boolean, label?: string);
|
|
4
|
-
log: import("@appium/types").AppiumLogger;
|
|
5
|
-
showLogs: boolean;
|
|
6
|
-
set logs(logs: any);
|
|
7
|
-
get logs(): any;
|
|
8
|
-
logIdxSinceLastRequest: number;
|
|
9
|
-
isCapturing: boolean;
|
|
10
|
-
startCapture(): Promise<void>;
|
|
11
|
-
stopCapture(): Promise<void>;
|
|
12
|
-
/**
|
|
13
|
-
* @privateRemarks Subclasses must implement this.
|
|
14
|
-
*/
|
|
15
|
-
addLogLine(): void;
|
|
16
|
-
getLogs(): Promise<any>;
|
|
17
|
-
getAllLogs(): Promise<any>;
|
|
18
|
-
_logs: any;
|
|
19
|
-
}
|
|
20
|
-
export const MAX_LOG_ENTRIES_COUNT: 10000;
|
|
21
|
-
//# sourceMappingURL=rotating-log.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rotating-log.d.ts","sourceRoot":"","sources":["../../../lib/device-log/rotating-log.js"],"names":[],"mappings":";AAKA;IACE,gDAQC;IAPC,0CAAkC;IAElC,kBAAwB;IAiD1B,oBAEC;IATD,gBAKC;IA7CC,+BAA+B;IAE/B,qBAAwB;IAI1B,8BAEC;IAGD,6BAEC;IAED;;OAEG;IACH,mBAEC;IAGD,wBAUC;IAGD,2BAEC;IAUC,WAAiB;CAEpB;AA1DD,0CAAoC"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.MAX_LOG_ENTRIES_COUNT = exports.RotatingLog = void 0;
|
|
7
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
-
const support_1 = require("appium/support");
|
|
9
|
-
const MAX_LOG_ENTRIES_COUNT = 10000;
|
|
10
|
-
exports.MAX_LOG_ENTRIES_COUNT = MAX_LOG_ENTRIES_COUNT;
|
|
11
|
-
class RotatingLog {
|
|
12
|
-
constructor(showLogs = false, label = 'Log Label') {
|
|
13
|
-
this.log = support_1.logger.getLogger(label);
|
|
14
|
-
this.showLogs = showLogs;
|
|
15
|
-
this.logs = [];
|
|
16
|
-
this.logIdxSinceLastRequest = 0;
|
|
17
|
-
this.isCapturing = false;
|
|
18
|
-
}
|
|
19
|
-
// eslint-disable-next-line require-await
|
|
20
|
-
async startCapture() {
|
|
21
|
-
this.isCapturing = true;
|
|
22
|
-
}
|
|
23
|
-
// eslint-disable-next-line require-await
|
|
24
|
-
async stopCapture() {
|
|
25
|
-
this.isCapturing = false;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* @privateRemarks Subclasses must implement this.
|
|
29
|
-
*/
|
|
30
|
-
addLogLine() {
|
|
31
|
-
throw new Error('Not implemented');
|
|
32
|
-
}
|
|
33
|
-
// eslint-disable-next-line require-await
|
|
34
|
-
async getLogs() {
|
|
35
|
-
if (this.logs.length && this.logIdxSinceLastRequest < this.logs.length) {
|
|
36
|
-
let result = this.logs;
|
|
37
|
-
if (this.logIdxSinceLastRequest > 0) {
|
|
38
|
-
result = result.slice(this.logIdxSinceLastRequest);
|
|
39
|
-
}
|
|
40
|
-
this.logIdxSinceLastRequest = this.logs.length;
|
|
41
|
-
return result;
|
|
42
|
-
}
|
|
43
|
-
return [];
|
|
44
|
-
}
|
|
45
|
-
// eslint-disable-next-line require-await
|
|
46
|
-
async getAllLogs() {
|
|
47
|
-
return lodash_1.default.clone(this.logs);
|
|
48
|
-
}
|
|
49
|
-
get logs() {
|
|
50
|
-
if (!this._logs) {
|
|
51
|
-
this.logs = [];
|
|
52
|
-
}
|
|
53
|
-
return this._logs;
|
|
54
|
-
}
|
|
55
|
-
set logs(logs) {
|
|
56
|
-
this._logs = logs;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.RotatingLog = RotatingLog;
|
|
60
|
-
exports.default = RotatingLog;
|
|
61
|
-
//# sourceMappingURL=rotating-log.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rotating-log.js","sourceRoot":"","sources":["../../../lib/device-log/rotating-log.js"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AACvB,4CAAsC;AAEtC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AA4Df,sDAAqB;AA1D1C,MAAM,WAAW;IACf,YAAY,QAAQ,GAAG,KAAK,EAAE,KAAK,GAAG,WAAW;QAC/C,IAAI,CAAC,GAAG,GAAG,gBAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;QAEhC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACvE,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,IAAI,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/C,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,UAAU;QACd,OAAO,gBAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI;QACN,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI;QACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;CACF;AAEO,kCAAW;AACnB,kBAAe,WAAW,CAAC"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import _ from 'lodash';
|
|
2
|
-
import {logger} from 'appium/support';
|
|
3
|
-
|
|
4
|
-
const MAX_LOG_ENTRIES_COUNT = 10000;
|
|
5
|
-
|
|
6
|
-
class RotatingLog {
|
|
7
|
-
constructor(showLogs = false, label = 'Log Label') {
|
|
8
|
-
this.log = logger.getLogger(label);
|
|
9
|
-
|
|
10
|
-
this.showLogs = showLogs;
|
|
11
|
-
this.logs = [];
|
|
12
|
-
this.logIdxSinceLastRequest = 0;
|
|
13
|
-
|
|
14
|
-
this.isCapturing = false;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// eslint-disable-next-line require-await
|
|
18
|
-
async startCapture() {
|
|
19
|
-
this.isCapturing = true;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// eslint-disable-next-line require-await
|
|
23
|
-
async stopCapture() {
|
|
24
|
-
this.isCapturing = false;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @privateRemarks Subclasses must implement this.
|
|
29
|
-
*/
|
|
30
|
-
addLogLine() {
|
|
31
|
-
throw new Error('Not implemented');
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// eslint-disable-next-line require-await
|
|
35
|
-
async getLogs() {
|
|
36
|
-
if (this.logs.length && this.logIdxSinceLastRequest < this.logs.length) {
|
|
37
|
-
let result = this.logs;
|
|
38
|
-
if (this.logIdxSinceLastRequest > 0) {
|
|
39
|
-
result = result.slice(this.logIdxSinceLastRequest);
|
|
40
|
-
}
|
|
41
|
-
this.logIdxSinceLastRequest = this.logs.length;
|
|
42
|
-
return result;
|
|
43
|
-
}
|
|
44
|
-
return [];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// eslint-disable-next-line require-await
|
|
48
|
-
async getAllLogs() {
|
|
49
|
-
return _.clone(this.logs);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
get logs() {
|
|
53
|
-
if (!this._logs) {
|
|
54
|
-
this.logs = [];
|
|
55
|
-
}
|
|
56
|
-
return this._logs;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
set logs(logs) {
|
|
60
|
-
this._logs = logs;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export {RotatingLog, MAX_LOG_ENTRIES_COUNT};
|
|
65
|
-
export default RotatingLog;
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import {RotatingLog, MAX_LOG_ENTRIES_COUNT} from './rotating-log';
|
|
2
|
-
import _ from 'lodash';
|
|
3
|
-
import {util} from 'appium/support';
|
|
4
|
-
|
|
5
|
-
class SafariConsoleLog extends RotatingLog {
|
|
6
|
-
constructor(showLogs) {
|
|
7
|
-
super(showLogs, 'SafariConsole');
|
|
8
|
-
|
|
9
|
-
// js console has `warning` level, so map to `warn`
|
|
10
|
-
this.log = new Proxy(this.log, {
|
|
11
|
-
get(target, prop, receiver) {
|
|
12
|
-
return Reflect.get(target, prop === 'warning' ? 'warn' : prop, receiver);
|
|
13
|
-
},
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
addLogLine(err, out) {
|
|
18
|
-
if (this.isCapturing) {
|
|
19
|
-
this.logs = this.logs || [];
|
|
20
|
-
while (this.logs.length >= MAX_LOG_ENTRIES_COUNT) {
|
|
21
|
-
this.logs.shift();
|
|
22
|
-
if (this.logIdxSinceLastRequest > 0) {
|
|
23
|
-
this.logIdxSinceLastRequest--;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/*
|
|
28
|
-
* The output will be like:
|
|
29
|
-
* {
|
|
30
|
-
* "source": "javascript",
|
|
31
|
-
* "level":"error",
|
|
32
|
-
* "text":"ReferenceError: Can't find variable: s_account",
|
|
33
|
-
* "type":"log",
|
|
34
|
-
* "line":2,
|
|
35
|
-
* "column":21,
|
|
36
|
-
* "url":"https://assets.adobedtm.com/b46e318d845250834eda10c5a20827c045a4d76f/scripts/satellite-57866f8b64746d53a8000104-staging.js",
|
|
37
|
-
* "repeatCount":1,
|
|
38
|
-
* "stackTrace":[{
|
|
39
|
-
* "functionName":"global code",
|
|
40
|
-
* "url":"https://assets.adobedtm.com/b46e318d845250834eda10c5a20827c045a4d76f/scripts/satellite-57866f8b64746d53a8000104-staging.js",
|
|
41
|
-
* "scriptId":"6",
|
|
42
|
-
* "lineNumber":2,
|
|
43
|
-
* "columnNumber":21
|
|
44
|
-
* }]
|
|
45
|
-
* }
|
|
46
|
-
*
|
|
47
|
-
* we need, at least, `level` (in accordance with Java levels
|
|
48
|
-
* (https://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html)),
|
|
49
|
-
* `timestamp`, and `message` to satisfy the java client. In order to
|
|
50
|
-
* provide all the information to the client, `message` is the full
|
|
51
|
-
* object, stringified.
|
|
52
|
-
*/
|
|
53
|
-
const entry = {
|
|
54
|
-
level:
|
|
55
|
-
{
|
|
56
|
-
error: 'SEVERE',
|
|
57
|
-
warning: 'WARNING',
|
|
58
|
-
log: 'FINE',
|
|
59
|
-
}[out.level] || 'INFO',
|
|
60
|
-
timestamp: Date.now(),
|
|
61
|
-
message: JSON.stringify(out),
|
|
62
|
-
};
|
|
63
|
-
this.logs.push(entry);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (_.has(out, 'count')) {
|
|
67
|
-
// this is a notification of the previous message being repeated
|
|
68
|
-
// this should _never_ be the first message, so the previous one ought to
|
|
69
|
-
// be populated. If it is not, nothing will break, it will just look odd
|
|
70
|
-
// in the output below (no url or line numbers)
|
|
71
|
-
const count = out.count;
|
|
72
|
-
out = this._previousOutput || {};
|
|
73
|
-
out.text = `Previous message repeated ${util.pluralize('time', count, true)}`;
|
|
74
|
-
} else {
|
|
75
|
-
// save the most recent output
|
|
76
|
-
this._previousOutput = out;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// format output like
|
|
80
|
-
// SafariConsole [WARNING][http://appium.io 2:13] Log something to warn
|
|
81
|
-
if (this.showLogs) {
|
|
82
|
-
let level = 'debug';
|
|
83
|
-
if (out.level === 'warning' || out.level === 'error') {
|
|
84
|
-
level = out.level;
|
|
85
|
-
}
|
|
86
|
-
for (const line of out.text.split('\n')) {
|
|
87
|
-
// url is optional, so get formatting here
|
|
88
|
-
const url = out.url ? `${out.url} ` : '';
|
|
89
|
-
this.log[level](`[${level.toUpperCase()}][${url}${out.line}:${out.column}] ${line}`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export {SafariConsoleLog};
|
|
96
|
-
export default SafariConsoleLog;
|