appium-mac2-driver 1.0.0 → 1.1.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/README.md +25 -0
- package/WebDriverAgentMac/WebDriverAgentLib/Commands/FBScreenshotCommands.m +32 -0
- package/build/index.js +52 -0
- package/build/lib/commands/execute.js +3 -2
- package/build/lib/commands/index.js +4 -2
- package/build/lib/commands/screenshots.js +26 -0
- package/lib/commands/execute.js +2 -0
- package/lib/commands/index.js +2 -0
- package/lib/commands/screenshots.js +32 -0
- package/npm-shrinkwrap.json +2140 -0
- package/package.json +5 -3
- package/WebDriverAgentMac/WebDriverAgentMac.xcodeproj/project.xcworkspace/xcuserdata/elf.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
Appium Mac2 Driver
|
|
2
2
|
====
|
|
3
3
|
|
|
4
|
+
[](https://npmjs.org/package/appium-mac2-driver)
|
|
5
|
+
[](https://npmjs.org/package/appium-mac2-driver)
|
|
6
|
+
|
|
7
|
+
[](https://github.com/appium/appium-mac2-driver/actions/workflows/publish.js.yml)
|
|
8
|
+
|
|
9
|
+
|
|
4
10
|
This is Appium driver for automating macOS applications using Apple's [XCTest](https://developer.apple.com/documentation/xctest) framework.
|
|
5
11
|
The driver operates in scope of [W3C WebDriver protocol](https://www.w3.org/TR/webdriver/) with several custom extensions to cover operating-system specific scenarios.
|
|
6
12
|
The original idea and parts of the source code are borrowed from the Facebook's [WebDriverAgent](https://github.com/facebookarchive/WebDriverAgent) project.
|
|
@@ -484,6 +490,24 @@ formFields | Map or `Array<Pair>` | no | Additional form fields for multipart ht
|
|
|
484
490
|
|
|
485
491
|
Base64-encoded content of the recorded media file if `remotePath` parameter is falsy or an empty string.
|
|
486
492
|
|
|
493
|
+
### macos: screenshots
|
|
494
|
+
|
|
495
|
+
Retrieves a screenshot of each display available to macOS.
|
|
496
|
+
|
|
497
|
+
#### Arguments
|
|
498
|
+
|
|
499
|
+
Name | Type | Required | Description | Example
|
|
500
|
+
--- | --- | --- | --- | ---
|
|
501
|
+
displayId | number | no | Display identifier to take a screenshot for. If not provided then all display screenshots are going to be returned. If no matches were found then an error is thrown. | 1
|
|
502
|
+
|
|
503
|
+
#### Returns
|
|
504
|
+
|
|
505
|
+
A dictionary where each key contains a unique display identifier
|
|
506
|
+
and values are dictionaries with following items:
|
|
507
|
+
- `id`: Display identifier
|
|
508
|
+
- `isMain`: Whether this display is the main one
|
|
509
|
+
- `payload`: The actual PNG screenshot data encoded to base64 string
|
|
510
|
+
|
|
487
511
|
|
|
488
512
|
## Application Under Test Concept
|
|
489
513
|
|
|
@@ -674,3 +698,4 @@ Execute `npm run test` to run unit tests and `npm run e2e-test` to run integrati
|
|
|
674
698
|
## Notes
|
|
675
699
|
|
|
676
700
|
- W3C actions support is limited (only mouse actions are supported). You could also use `macos:` extension APIs to cover your test scenarios
|
|
701
|
+
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
#import "FBScreenshotCommands.h"
|
|
11
11
|
|
|
12
12
|
#import "XCTest/XCTest.h"
|
|
13
|
+
#import "FBRouteRequest.h"
|
|
13
14
|
|
|
14
15
|
@implementation FBScreenshotCommands
|
|
15
16
|
|
|
@@ -21,6 +22,9 @@
|
|
|
21
22
|
@[
|
|
22
23
|
[[FBRoute GET:@"/screenshot"].withoutSession respondWithTarget:self action:@selector(handleGetScreenshot:)],
|
|
23
24
|
[[FBRoute GET:@"/screenshot"] respondWithTarget:self action:@selector(handleGetScreenshot:)],
|
|
25
|
+
|
|
26
|
+
[[FBRoute POST:@"/wda/screenshots"].withoutSession respondWithTarget:self action:@selector(handleGetScreenshots:)],
|
|
27
|
+
[[FBRoute POST:@"/wda/screenshots"] respondWithTarget:self action:@selector(handleGetScreenshots:)],
|
|
24
28
|
];
|
|
25
29
|
}
|
|
26
30
|
|
|
@@ -39,4 +43,32 @@
|
|
|
39
43
|
return FBResponseWithObject(screenshot);
|
|
40
44
|
}
|
|
41
45
|
|
|
46
|
+
+ (id<FBResponsePayload>)handleGetScreenshots:(FBRouteRequest *)request
|
|
47
|
+
{
|
|
48
|
+
NSNumber *desiredId = request.arguments[@"displayId"];
|
|
49
|
+
NSMutableDictionary <NSString *, NSDictionary<NSString *, id> *> *result = [NSMutableDictionary new];
|
|
50
|
+
NSMutableArray <NSNumber *> *availableDisplayIds = [NSMutableArray new];
|
|
51
|
+
for (XCUIScreen *screen in XCUIScreen.screens) {
|
|
52
|
+
NSNumber *displayId = [screen valueForKey:@"_displayID"];
|
|
53
|
+
if (nil == displayId || (nil != desiredId && ![desiredId isEqualToNumber:displayId])) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
[availableDisplayIds addObject:displayId];
|
|
58
|
+
result[displayId.stringValue] = @{
|
|
59
|
+
@"id": displayId,
|
|
60
|
+
@"isMain": [screen valueForKey:@"_isMainScreen"] ?: NSNull.null,
|
|
61
|
+
@"payload": [screen.screenshot.PNGRepresentation
|
|
62
|
+
base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength] ?: NSNull.null
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (nil != desiredId && 0 == [result count]) {
|
|
66
|
+
NSString *message = [NSString stringWithFormat:@"The screen identified by %@ is not available to XCTest. Only the following identifiers are available: %@",
|
|
67
|
+
desiredId, availableDisplayIds];
|
|
68
|
+
return FBResponseWithStatus([FBCommandStatus unableToCaptureScreenErrorWithMessage:message
|
|
69
|
+
traceback:nil]);
|
|
70
|
+
}
|
|
71
|
+
return FBResponseWithObject(result.copy);
|
|
72
|
+
}
|
|
73
|
+
|
|
42
74
|
@end
|
package/build/index.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports, "Mac2Driver", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () {
|
|
11
|
+
return _driver.default;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
exports.default = void 0;
|
|
15
|
+
Object.defineProperty(exports, "startServer", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () {
|
|
18
|
+
return _server.startServer;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
require("source-map-support/register");
|
|
23
|
+
|
|
24
|
+
var _driver = _interopRequireDefault(require("./lib/driver"));
|
|
25
|
+
|
|
26
|
+
var _server = require("./lib/server");
|
|
27
|
+
|
|
28
|
+
var _asyncbox = require("asyncbox");
|
|
29
|
+
|
|
30
|
+
const DEFAULT_HOST = 'localhost';
|
|
31
|
+
const DEFAULT_PORT = 4797;
|
|
32
|
+
|
|
33
|
+
async function main() {
|
|
34
|
+
const getArgValue = argName => {
|
|
35
|
+
const argIndex = process.argv.indexOf(argName);
|
|
36
|
+
return argIndex > 0 ? process.argv[argIndex + 1] : null;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const port = parseInt(getArgValue('--port'), 10) || DEFAULT_PORT;
|
|
40
|
+
const host = getArgValue('--host') || DEFAULT_HOST;
|
|
41
|
+
return await (0, _server.startServer)(port, host);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (require.main === module) {
|
|
45
|
+
(0, _asyncbox.asyncify)(main);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
var _default = _driver.default;
|
|
49
|
+
exports.default = _default;require('source-map-support').install();
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfSE9TVCIsIkRFRkFVTFRfUE9SVCIsIm1haW4iLCJnZXRBcmdWYWx1ZSIsImFyZ05hbWUiLCJhcmdJbmRleCIsInByb2Nlc3MiLCJhcmd2IiwiaW5kZXhPZiIsInBvcnQiLCJwYXJzZUludCIsImhvc3QiLCJyZXF1aXJlIiwibW9kdWxlIiwiTWFjMkRyaXZlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxZQUFZLEdBQUcsV0FBckI7QUFDQSxNQUFNQyxZQUFZLEdBQUcsSUFBckI7O0FBRUEsZUFBZUMsSUFBZixHQUF1QjtBQUNyQixRQUFNQyxXQUFXLEdBQUlDLE9BQUQsSUFBYTtBQUMvQixVQUFNQyxRQUFRLEdBQUdDLE9BQU8sQ0FBQ0MsSUFBUixDQUFhQyxPQUFiLENBQXFCSixPQUFyQixDQUFqQjtBQUNBLFdBQU9DLFFBQVEsR0FBRyxDQUFYLEdBQWVDLE9BQU8sQ0FBQ0MsSUFBUixDQUFhRixRQUFRLEdBQUcsQ0FBeEIsQ0FBZixHQUE0QyxJQUFuRDtBQUNELEdBSEQ7O0FBSUEsUUFBTUksSUFBSSxHQUFHQyxRQUFRLENBQUNQLFdBQVcsQ0FBQyxRQUFELENBQVosRUFBd0IsRUFBeEIsQ0FBUixJQUF1Q0YsWUFBcEQ7QUFDQSxRQUFNVSxJQUFJLEdBQUdSLFdBQVcsQ0FBQyxRQUFELENBQVgsSUFBeUJILFlBQXRDO0FBQ0EsU0FBTyxNQUFNLHlCQUFZUyxJQUFaLEVBQWtCRSxJQUFsQixDQUFiO0FBQ0Q7O0FBRUQsSUFBSUMsT0FBTyxDQUFDVixJQUFSLEtBQWlCVyxNQUFyQixFQUE2QjtBQUMzQiwwQkFBU1gsSUFBVDtBQUNEOztlQUVjWSxlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hYzJEcml2ZXIgZnJvbSAnLi9saWIvZHJpdmVyJztcbmltcG9ydCB7IHN0YXJ0U2VydmVyIH0gZnJvbSAnLi9saWIvc2VydmVyJztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBERUZBVUxUX0hPU1QgPSAnbG9jYWxob3N0JztcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDQ3OTc7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4gKCkge1xuICBjb25zdCBnZXRBcmdWYWx1ZSA9IChhcmdOYW1lKSA9PiB7XG4gICAgY29uc3QgYXJnSW5kZXggPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihhcmdOYW1lKTtcbiAgICByZXR1cm4gYXJnSW5kZXggPiAwID8gcHJvY2Vzcy5hcmd2W2FyZ0luZGV4ICsgMV0gOiBudWxsO1xuICB9O1xuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQoZ2V0QXJnVmFsdWUoJy0tcG9ydCcpLCAxMCkgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCBob3N0ID0gZ2V0QXJnVmFsdWUoJy0taG9zdCcpIHx8IERFRkFVTFRfSE9TVDtcbiAgcmV0dXJuIGF3YWl0IHN0YXJ0U2VydmVyKHBvcnQsIGhvc3QpO1xufVxuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkobWFpbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hYzJEcml2ZXI7XG5leHBvcnQgeyBNYWMyRHJpdmVyLCBzdGFydFNlcnZlciB9O1xuIl0sImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLiJ9
|
|
@@ -39,7 +39,8 @@ const EXTENSION_COMMANDS_MAPPING = {
|
|
|
39
39
|
queryAppState: 'macosQueryAppState',
|
|
40
40
|
appleScript: 'macosExecAppleScript',
|
|
41
41
|
startRecordingScreen: 'startRecordingScreen',
|
|
42
|
-
stopRecordingScreen: 'stopRecordingScreen'
|
|
42
|
+
stopRecordingScreen: 'stopRecordingScreen',
|
|
43
|
+
screenshots: 'macosScreenshots'
|
|
43
44
|
};
|
|
44
45
|
|
|
45
46
|
commands.execute = async function execute(script, args) {
|
|
@@ -65,4 +66,4 @@ var _default = commands;
|
|
|
65
66
|
exports.default = _default;require('source-map-support').install();
|
|
66
67
|
|
|
67
68
|
|
|
68
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiRVhURU5TSU9OX0NPTU1BTkRTX01BUFBJTkciLCJzZXRWYWx1ZSIsImNsaWNrIiwic2Nyb2xsIiwic3dpcGUiLCJyaWdodENsaWNrIiwiaG92ZXIiLCJkb3VibGVDbGljayIsImNsaWNrQW5kRHJhZyIsImNsaWNrQW5kRHJhZ0FuZEhvbGQiLCJrZXlzIiwidGFwIiwiZG91YmxlVGFwIiwicHJlc3MiLCJwcmVzc0FuZERyYWciLCJwcmVzc0FuZERyYWdBbmRIb2xkIiwic291cmNlIiwibGF1bmNoQXBwIiwiYWN0aXZhdGVBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJxdWVyeUFwcFN0YXRlIiwiYXBwbGVTY3JpcHQiLCJzdGFydFJlY29yZGluZ1NjcmVlbiIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJzY3JlZW5zaG90cyIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJsb2ciLCJpbmZvIiwicmVwbGFjZSIsInRyaW0iLCJleGVjdXRlTWFjb3NDb21tYW5kIiwiXyIsImlzQXJyYXkiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiY29tbWFuZCIsIm9wdHMiLCJoYXMiLCJVbmtub3duQ29tbWFuZEVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjtBQUVBLE1BQU1DLDBCQUEwQixHQUFHO0FBQ2pDQyxFQUFBQSxRQUFRLEVBQUUsZUFEdUI7QUFFakNDLEVBQUFBLEtBQUssRUFBRSxZQUYwQjtBQUdqQ0MsRUFBQUEsTUFBTSxFQUFFLGFBSHlCO0FBSWpDQyxFQUFBQSxLQUFLLEVBQUUsWUFKMEI7QUFLakNDLEVBQUFBLFVBQVUsRUFBRSxpQkFMcUI7QUFNakNDLEVBQUFBLEtBQUssRUFBRSxZQU4wQjtBQU9qQ0MsRUFBQUEsV0FBVyxFQUFFLGtCQVBvQjtBQVFqQ0MsRUFBQUEsWUFBWSxFQUFFLG1CQVJtQjtBQVNqQ0MsRUFBQUEsbUJBQW1CLEVBQUUsMEJBVFk7QUFVakNDLEVBQUFBLElBQUksRUFBRSxXQVYyQjtBQVlqQ0MsRUFBQUEsR0FBRyxFQUFFLFVBWjRCO0FBYWpDQyxFQUFBQSxTQUFTLEVBQUUsZ0JBYnNCO0FBY2pDQyxFQUFBQSxLQUFLLEVBQUUsWUFkMEI7QUFlakNDLEVBQUFBLFlBQVksRUFBRSxtQkFmbUI7QUFnQmpDQyxFQUFBQSxtQkFBbUIsRUFBRSwwQkFoQlk7QUFrQmpDQyxFQUFBQSxNQUFNLEVBQUUsYUFsQnlCO0FBb0JqQ0MsRUFBQUEsU0FBUyxFQUFFLGdCQXBCc0I7QUFxQmpDQyxFQUFBQSxXQUFXLEVBQUUsa0JBckJvQjtBQXNCakNDLEVBQUFBLFlBQVksRUFBRSxtQkF0Qm1CO0FBdUJqQ0MsRUFBQUEsYUFBYSxFQUFFLG9CQXZCa0I7QUF5QmpDQyxFQUFBQSxXQUFXLEVBQUUsc0JBekJvQjtBQTJCakNDLEVBQUFBLG9CQUFvQixFQUFFLHNCQTNCVztBQTRCakNDLEVBQUFBLG1CQUFtQixFQUFFLHFCQTVCWTtBQThCakNDLEVBQUFBLFdBQVcsRUFBRTtBQTlCb0IsQ0FBbkM7O0FBaUNBekIsUUFBUSxDQUFDMEIsT0FBVCxHQUFtQixlQUFlQSxPQUFmLENBQXdCQyxNQUF4QixFQUFnQ0MsSUFBaEMsRUFBc0M7QUFDdkQsTUFBSUQsTUFBTSxDQUFDRSxLQUFQLENBQWEsU0FBYixDQUFKLEVBQTZCO0FBQzNCQyxvQkFBSUMsSUFBSixDQUFVLGdDQUErQkosTUFBTyxHQUFoRDs7QUFDQUEsSUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNLLE9BQVAsQ0FBZSxTQUFmLEVBQTBCLEVBQTFCLEVBQThCQyxJQUE5QixFQUFUO0FBQ0EsV0FBTyxNQUFNLEtBQUtDLG1CQUFMLENBQXlCUCxNQUF6QixFQUFpQ1EsZ0JBQUVDLE9BQUYsQ0FBVVIsSUFBVixJQUFrQkEsSUFBSSxDQUFDLENBQUQsQ0FBdEIsR0FBNEJBLElBQTdELENBQWI7QUFDRDs7QUFDRCxRQUFNLElBQUlTLG1CQUFPQyxtQkFBWCxFQUFOO0FBQ0QsQ0FQRDs7QUFTQXRDLFFBQVEsQ0FBQ2tDLG1CQUFULEdBQStCLGVBQWVBLG1CQUFmLENBQW9DSyxPQUFwQyxFQUE2Q0MsSUFBSSxHQUFHLEVBQXBELEVBQXdEO0FBQ3JGLE1BQUksQ0FBQ0wsZ0JBQUVNLEdBQUYsQ0FBTXhDLDBCQUFOLEVBQWtDc0MsT0FBbEMsQ0FBTCxFQUFpRDtBQUMvQyxVQUFNLElBQUlGLG1CQUFPSyxtQkFBWCxDQUFnQyw4QkFBNkJILE9BQVEsS0FBdEMsR0FDbEMsUUFBT0osZ0JBQUV4QixJQUFGLENBQU9WLDBCQUFQLENBQW1DLDBCQUR2QyxDQUFOO0FBRUQ7O0FBQ0QsU0FBTyxNQUFNLEtBQUtBLDBCQUEwQixDQUFDc0MsT0FBRCxDQUEvQixFQUEwQ0MsSUFBMUMsQ0FBYjtBQUNELENBTkQ7O2VBUWV4QyxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBFWFRFTlNJT05fQ09NTUFORFNfTUFQUElORyA9IHtcbiAgc2V0VmFsdWU6ICdtYWNvc1NldFZhbHVlJyxcbiAgY2xpY2s6ICdtYWNvc0NsaWNrJyxcbiAgc2Nyb2xsOiAnbWFjb3NTY3JvbGwnLFxuICBzd2lwZTogJ21hY29zU3dpcGUnLFxuICByaWdodENsaWNrOiAnbWFjb3NSaWdodENsaWNrJyxcbiAgaG92ZXI6ICdtYWNvc0hvdmVyJyxcbiAgZG91YmxlQ2xpY2s6ICdtYWNvc0RvdWJsZUNsaWNrJyxcbiAgY2xpY2tBbmREcmFnOiAnbWFjb3NDbGlja0FuZERyYWcnLFxuICBjbGlja0FuZERyYWdBbmRIb2xkOiAnbWFjb3NDbGlja0FuZERyYWdBbmRIb2xkJyxcbiAga2V5czogJ21hY29zS2V5cycsXG5cbiAgdGFwOiAnbWFjb3NUYXAnLFxuICBkb3VibGVUYXA6ICdtYWNvc0RvdWJsZVRhcCcsXG4gIHByZXNzOiAnbWFjb3NQcmVzcycsXG4gIHByZXNzQW5kRHJhZzogJ21hY29zUHJlc3NBbmREcmFnJyxcbiAgcHJlc3NBbmREcmFnQW5kSG9sZDogJ21hY29zUHJlc3NBbmREcmFnQW5kSG9sZCcsXG5cbiAgc291cmNlOiAnbWFjb3NTb3VyY2UnLFxuXG4gIGxhdW5jaEFwcDogJ21hY29zTGF1bmNoQXBwJyxcbiAgYWN0aXZhdGVBcHA6ICdtYWNvc0FjdGl2YXRlQXBwJyxcbiAgdGVybWluYXRlQXBwOiAnbWFjb3NUZXJtaW5hdGVBcHAnLFxuICBxdWVyeUFwcFN0YXRlOiAnbWFjb3NRdWVyeUFwcFN0YXRlJyxcblxuICBhcHBsZVNjcmlwdDogJ21hY29zRXhlY0FwcGxlU2NyaXB0JyxcblxuICBzdGFydFJlY29yZGluZ1NjcmVlbjogJ3N0YXJ0UmVjb3JkaW5nU2NyZWVuJyxcbiAgc3RvcFJlY29yZGluZ1NjcmVlbjogJ3N0b3BSZWNvcmRpbmdTY3JlZW4nLFxuXG4gIHNjcmVlbnNob3RzOiAnbWFjb3NTY3JlZW5zaG90cycsXG59O1xuXG5jb21tYW5kcy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tYWNvczovKSkge1xuICAgIGxvZy5pbmZvKGBFeGVjdXRpbmcgZXh0ZW5zaW9uIGNvbW1hbmQgJyR7c2NyaXB0fSdgKTtcbiAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgvXm1hY29zOi8sICcnKS50cmltKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZU1hY29zQ29tbWFuZChzY3JpcHQsIF8uaXNBcnJheShhcmdzKSA/IGFyZ3NbMF0gOiBhcmdzKTtcbiAgfVxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbn07XG5cbmNvbW1hbmRzLmV4ZWN1dGVNYWNvc0NvbW1hbmQgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTWFjb3NDb21tYW5kIChjb21tYW5kLCBvcHRzID0ge30pIHtcbiAgaWYgKCFfLmhhcyhFWFRFTlNJT05fQ09NTUFORFNfTUFQUElORywgY29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gZXh0ZW5zaW9uIGNvbW1hbmQgXCIke2NvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMoRVhURU5TSU9OX0NPTU1BTkRTX01BUFBJTkcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW0VYVEVOU0lPTl9DT01NQU5EU19NQVBQSU5HW2NvbW1hbmRdXShvcHRzKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZXhlY3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -23,11 +23,13 @@ var _applescript = _interopRequireDefault(require("./applescript"));
|
|
|
23
23
|
|
|
24
24
|
var _recordScreen = _interopRequireDefault(require("./record-screen"));
|
|
25
25
|
|
|
26
|
+
var _screenshots = _interopRequireDefault(require("./screenshots"));
|
|
27
|
+
|
|
26
28
|
const commands = {};
|
|
27
29
|
exports.commands = commands;
|
|
28
|
-
Object.assign(commands, _find.default, _execute.default, _gestures.default, _source.default, _appManagement.default, _applescript.default, _recordScreen.default);
|
|
30
|
+
Object.assign(commands, _find.default, _execute.default, _gestures.default, _source.default, _appManagement.default, _applescript.default, _recordScreen.default, _screenshots.default);
|
|
29
31
|
var _default = commands;
|
|
30
32
|
exports.default = _default;require('source-map-support').install();
|
|
31
33
|
|
|
32
34
|
|
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9pbmRleC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImZpbmRDbWRzIiwiZXhlY3V0ZUNtZHMiLCJnZXN0dXJlQ21kcyIsInNvdXJjZUNtZHMiLCJhcHBNYW5hZ2VtZW50Q21kcyIsImFwcGxlU2NyaXB0Q21kcyIsInNjcmVlblJlY29yZGluZ0NtZHMiLCJzY3JlZW5zaG90c0NtZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOztBQUNBQyxNQUFNLENBQUNDLE1BQVAsQ0FDRUYsUUFERixFQUVFRyxhQUZGLEVBR0VDLGdCQUhGLEVBSUVDLGlCQUpGLEVBS0VDLGVBTEYsRUFNRUMsc0JBTkYsRUFPRUMsb0JBUEYsRUFRRUMscUJBUkYsRUFTRUMsb0JBVEY7ZUFjZVYsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaW5kQ21kcyBmcm9tICcuL2ZpbmQnO1xuaW1wb3J0IGV4ZWN1dGVDbWRzIGZyb20gJy4vZXhlY3V0ZSc7XG5pbXBvcnQgZ2VzdHVyZUNtZHMgZnJvbSAnLi9nZXN0dXJlcyc7XG5pbXBvcnQgc291cmNlQ21kcyBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgYXBwTWFuYWdlbWVudENtZHMgZnJvbSAnLi9hcHAtbWFuYWdlbWVudCc7XG5pbXBvcnQgYXBwbGVTY3JpcHRDbWRzIGZyb20gJy4vYXBwbGVzY3JpcHQnO1xuaW1wb3J0IHNjcmVlblJlY29yZGluZ0NtZHMgZnJvbSAnLi9yZWNvcmQtc2NyZWVuJztcbmltcG9ydCBzY3JlZW5zaG90c0NtZHMgZnJvbSAnLi9zY3JlZW5zaG90cyc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5PYmplY3QuYXNzaWduKFxuICBjb21tYW5kcyxcbiAgZmluZENtZHMsXG4gIGV4ZWN1dGVDbWRzLFxuICBnZXN0dXJlQ21kcyxcbiAgc291cmNlQ21kcyxcbiAgYXBwTWFuYWdlbWVudENtZHMsXG4gIGFwcGxlU2NyaXB0Q21kcyxcbiAgc2NyZWVuUmVjb3JkaW5nQ21kcyxcbiAgc2NyZWVuc2hvdHNDbWRzLFxuICAvLyBhZGQgb3RoZXIgY29tbWFuZCB0eXBlcyBoZXJlXG4pO1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9pbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.commands = void 0;
|
|
7
|
+
|
|
8
|
+
require("source-map-support/register");
|
|
9
|
+
|
|
10
|
+
const commands = {};
|
|
11
|
+
exports.commands = commands;
|
|
12
|
+
|
|
13
|
+
commands.macosScreenshots = async function macosScreenshots(opts = {}) {
|
|
14
|
+
const {
|
|
15
|
+
displayId
|
|
16
|
+
} = opts;
|
|
17
|
+
return await this.wda.proxy.command('/wda/screenshots', 'POST', {
|
|
18
|
+
displayId
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
var _default = commands;
|
|
23
|
+
exports.default = _default;require('source-map-support').install();
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9zY3JlZW5zaG90cy5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsIm1hY29zU2NyZWVuc2hvdHMiLCJvcHRzIiwiZGlzcGxheUlkIiwid2RhIiwicHJveHkiLCJjb21tYW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7OztBQXlCQUEsUUFBUSxDQUFDQyxnQkFBVCxHQUE0QixlQUFlQSxnQkFBZixDQUFpQ0MsSUFBSSxHQUFHLEVBQXhDLEVBQTRDO0FBQ3RFLFFBQU07QUFBQ0MsSUFBQUE7QUFBRCxNQUFjRCxJQUFwQjtBQUNBLFNBQU8sTUFBTSxLQUFLRSxHQUFMLENBQVNDLEtBQVQsQ0FBZUMsT0FBZixDQUF1QixrQkFBdkIsRUFBMkMsTUFBM0MsRUFBbUQ7QUFBQ0gsSUFBQUE7QUFBRCxHQUFuRCxDQUFiO0FBQ0QsQ0FIRDs7ZUFNZUgsUSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2NyZWVuc2hvdHNJbmZvXG4gKlxuICogQSBkaWN0aW9uYXJ5IHdoZXJlIGVhY2gga2V5IGNvbnRhaW5zIGEgdW5pcXVlIGRpc3BsYXkgaWRlbnRpZmllclxuICogYW5kIHZhbHVlcyBhcmUgZGljdGlvbmFyaWVzIHdpdGggZm9sbG93aW5nIGl0ZW1zOlxuICogLSBpZDogRGlzcGxheSBpZGVudGlmaWVyXG4gKiAtIGlzTWFpbjogV2hldGhlciB0aGlzIGRpc3BsYXkgaXMgdGhlIG1haW4gb25lXG4gKiAtIHBheWxvYWQ6IFRoZSBhY3R1YWwgUE5HIHNjcmVlbnNob3QgZGF0YSBlbmNvZGVkIHRvIGJhc2U2NCBzdHJpbmdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcmVlbnNob3RzT3B0c1xuICogQHByb3BlcnR5IHtudW1iZXI/fSBkaXNwbGF5SWQgbWFjT1MgZGlzcGxheSBpZGVudGlmaWVyIHRvIHRha2UgYSBzY3JlZW5zaG90IGZvci5cbiAqIElmIG5vdCBwcm92aWRlZCB0aGVuIHNjcmVlbnNob3RzIG9mIGFsbCBkaXNwbGF5cyBhcmUgZ29pbmcgdG8gYmUgcmV0dXJuZWQuXG4gKiBJZiBubyBtYXRjaGVzIHdlcmUgZm91bmQgdGhlbiBhbiBlcnJvciBpcyB0aHJvd24uXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgc2NyZWVuc2hvdHMgb2YgZWFjaCBkaXNwbGF5IGF2YWlsYWJsZSB0byBtYWNPU1xuICpcbiAqIEBwYXJhbSB7U2NyZWVuc2hvdHNPcHRzfSBvcHRzXG4gKiBAcmV0dXJucyB7U2NyZWVuc2hvdHNJbmZvfVxuICovXG5jb21tYW5kcy5tYWNvc1NjcmVlbnNob3RzID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTY3JlZW5zaG90cyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtkaXNwbGF5SWR9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQoJy93ZGEvc2NyZWVuc2hvdHMnLCAnUE9TVCcsIHtkaXNwbGF5SWR9KTtcbn07XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL3NjcmVlbnNob3RzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
package/lib/commands/execute.js
CHANGED
package/lib/commands/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import sourceCmds from './source';
|
|
|
5
5
|
import appManagementCmds from './app-management';
|
|
6
6
|
import appleScriptCmds from './applescript';
|
|
7
7
|
import screenRecordingCmds from './record-screen';
|
|
8
|
+
import screenshotsCmds from './screenshots';
|
|
8
9
|
|
|
9
10
|
const commands = {};
|
|
10
11
|
Object.assign(
|
|
@@ -16,6 +17,7 @@ Object.assign(
|
|
|
16
17
|
appManagementCmds,
|
|
17
18
|
appleScriptCmds,
|
|
18
19
|
screenRecordingCmds,
|
|
20
|
+
screenshotsCmds,
|
|
19
21
|
// add other command types here
|
|
20
22
|
);
|
|
21
23
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const commands = {};
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @typedef {Object} ScreenshotsInfo
|
|
5
|
+
*
|
|
6
|
+
* A dictionary where each key contains a unique display identifier
|
|
7
|
+
* and values are dictionaries with following items:
|
|
8
|
+
* - id: Display identifier
|
|
9
|
+
* - isMain: Whether this display is the main one
|
|
10
|
+
* - payload: The actual PNG screenshot data encoded to base64 string
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {Object} ScreenshotsOpts
|
|
15
|
+
* @property {number?} displayId macOS display identifier to take a screenshot for.
|
|
16
|
+
* If not provided then screenshots of all displays are going to be returned.
|
|
17
|
+
* If no matches were found then an error is thrown.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Retrieves screenshots of each display available to macOS
|
|
22
|
+
*
|
|
23
|
+
* @param {ScreenshotsOpts} opts
|
|
24
|
+
* @returns {ScreenshotsInfo}
|
|
25
|
+
*/
|
|
26
|
+
commands.macosScreenshots = async function macosScreenshots (opts = {}) {
|
|
27
|
+
const {displayId} = opts;
|
|
28
|
+
return await this.wda.proxy.command('/wda/screenshots', 'POST', {displayId});
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { commands };
|
|
32
|
+
export default commands;
|