appium-safari-driver 3.0.4 → 3.1.2
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/.releaserc +7 -1
- package/build/index.js +1 -1
- package/build/lib/commands/cookies.js +1 -1
- package/build/lib/commands/find.js +1 -1
- package/build/lib/commands/index.js +1 -1
- package/build/lib/commands/record-screen.js +26 -36
- package/build/lib/desired-caps.js +1 -1
- package/build/lib/driver.js +3 -6
- package/build/lib/logger.js +1 -1
- package/build/lib/safari.js +10 -9
- package/build/lib/server.js +1 -1
- package/build/lib/utils.js +1 -1
- package/build/test/functional/desktop-driver-e2e-specs.js +1 -1
- package/build/test/functional/mobile-driver-e2e-specs.js +1 -1
- package/build/test/unit/driver-specs.js +1 -1
- package/build/test/unit/utils-specs.js +1 -1
- package/build/test/utils.js +1 -1
- package/lib/commands/record-screen.js +22 -20
- package/lib/driver.js +2 -3
- package/lib/safari.js +9 -9
- package/npm-shrinkwrap.json +627 -331
- package/package.json +6 -9
|
@@ -83,4 +83,4 @@ describe('Mobile SafariDriver', function () {
|
|
|
83
83
|
});require('source-map-support').install();
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC9mdW5jdGlvbmFsL21vYmlsZS1kcml2ZXItZTJlLXNwZWNzLmpzIiwibmFtZXMiOlsiY2hhaSIsInNob3VsZCIsInVzZSIsImNoYWlBc1Byb21pc2VkIiwiUExBVEZPUk1fVkVSU0lPTiIsInByb2Nlc3MiLCJlbnYiLCJERVZJQ0VfTkFNRSIsIkNBUFMiLCJicm93c2VyTmFtZSIsInBsYXRmb3JtTmFtZSIsImRlc2NyaWJlIiwidGltZW91dCIsIk1PQ0hBX1RJTUVPVVQiLCJzZXJ2ZXIiLCJkcml2ZXIiLCJiZWZvcmUiLCJDSSIsInNraXAiLCJzaW1jdGwiLCJTaW1jdGwiLCJhbGxEZXZpY2VzIiwiZ2V0RGV2aWNlcyIsImRldmljZSIsImZpbmQiLCJuYW1lIiwiRXJyb3IiLCJzdGF0ZSIsInVkaWQiLCJib290RGV2aWNlIiwic3RhcnRCb290TW9uaXRvciIsIlBPUlQiLCJIT1NUIiwiYWZ0ZXIiLCJjbG9zZSIsImJlZm9yZUVhY2giLCJob3N0bmFtZSIsInBvcnQiLCJjYXBhYmlsaXRpZXMiLCJhZnRlckVhY2giLCJkZWxldGVTZXNzaW9uIiwiaXQiLCJ1cmwiLCJidXR0b24iLCIkIiwiZ2V0VGV4dCIsImV2ZW50dWFsbHkiLCJlcWwiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJ0ZXN0L2Z1bmN0aW9uYWwvbW9iaWxlLWRyaXZlci1lMmUtc3BlY3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSAnd2ViZHJpdmVyaW8nO1xuaW1wb3J0IHsgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgY2hhaUFzUHJvbWlzZWQgZnJvbSAnY2hhaS1hcy1wcm9taXNlZCc7XG5pbXBvcnQgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCBTaW1jdGwgZnJvbSAnbm9kZS1zaW1jdGwnO1xuaW1wb3J0IHsgSE9TVCwgUE9SVCwgTU9DSEFfVElNRU9VVCB9IGZyb20gJy4uL3V0aWxzJztcblxuY2hhaS5zaG91bGQoKTtcbmNoYWkudXNlKGNoYWlBc1Byb21pc2VkKTtcblxuY29uc3QgUExBVEZPUk1fVkVSU0lPTiA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1ZFUlNJT04gfHwgJzE0LjEnO1xuY29uc3QgREVWSUNFX05BTUUgPSBwcm9jZXNzLmVudi5ERVZJQ0VfTkFNRSB8fCAnaVBob25lIDExIFBybyBNYXgnO1xuY29uc3QgQ0FQUyA9IHtcbiAgYnJvd3Nlck5hbWU6ICdBcHBpdW1TYWZhcmknLFxuICBwbGF0Zm9ybU5hbWU6ICdpb3MnLFxuICAnc2FmYXJpOnVzZVNpbXVsYXRvcic6IHRydWUsXG4gICdzYWZhcmk6cGxhdGZvcm1WZXJzaW9uJzogUExBVEZPUk1fVkVSU0lPTixcbiAgJ3NhZmFyaTpkZXZpY2VOYW1lJzogREVWSUNFX05BTUUsXG59O1xuXG5kZXNjcmliZSgnTW9iaWxlIFNhZmFyaURyaXZlcicsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy50aW1lb3V0KE1PQ0hBX1RJTUVPVVQpO1xuXG4gIGxldCBzZXJ2ZXI7XG4gIGxldCBkcml2ZXI7XG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJKSB7XG4gICAgICAvLyBJbiBBenVyZSBDSSB0aGUgc3R1ZmYgdW5leHBlY3RlZGx5IGZhaWxzIHdpdGhcbiAgICAgIC8vIFwiVGhlIGRldmljZSBpcyBub3QgY29uZmlndXJlZCB0byBhbGxvdyByZW1vdGUgY29udHJvbCB2aWEgV2ViRHJpdmVyLiBUbyBmaXggdGhpcywgdG9nZ2xlICdBbGxvdyBSZW1vdGUgQXV0b21hdGlvbicgaW4gU2FmYXJpJ3Mgc2V0dGluZ3MgKFNldHRpbmdzIEFwcCA+IFNhZmFyaSA+IEFkdmFuY2VkKS5cIlxuICAgICAgLy8gZXJyb3JcbiAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICB9XG5cbiAgICAvLyBQcmVib290IFNpbXVsYXRvciB0byBhdm9pZCB1bmV4cGVjdGVkIHRpbWVvdXRzXG4gICAgY29uc3Qgc2ltY3RsID0gbmV3IFNpbWN0bCgpO1xuICAgIGNvbnN0IGFsbERldmljZXMgPSBhd2FpdCBzaW1jdGwuZ2V0RGV2aWNlcyhQTEFURk9STV9WRVJTSU9OLCAnaU9TJyk7XG4gICAgY29uc3QgZGV2aWNlID0gYWxsRGV2aWNlcy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT09IERFVklDRV9OQU1FKTtcbiAgICBpZiAoIWRldmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAnJHtERVZJQ0VfTkFNRX0nIFNpbXVsYXRvciAoJHtQTEFURk9STV9WRVJTSU9OfSlgKTtcbiAgICB9XG4gICAgaWYgKGRldmljZS5zdGF0ZSAhPT0gJ0Jvb3RlZCcpIHtcbiAgICAgIHNpbWN0bC51ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICBhd2FpdCBzaW1jdGwuYm9vdERldmljZSgpO1xuICAgICAgYXdhaXQgc2ltY3RsLnN0YXJ0Qm9vdE1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcihQT1JULCBIT1NUKTtcbiAgfSk7XG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIHNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyID0gYXdhaXQgcmVtb3RlKHtcbiAgICAgIGhvc3RuYW1lOiBIT1NULFxuICAgICAgcG9ydDogUE9SVCxcbiAgICAgIGNhcGFiaWxpdGllczogQ0FQUyxcbiAgICB9KTtcbiAgfSk7XG4gIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGRyaXZlcikge1xuICAgICAgYXdhaXQgZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIGRyaXZlciA9IG51bGw7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0YXJ0IGFuZCBzdG9wIGEgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBkcml2ZXIudXJsKCdodHRwczovL2FwcGl1bS5pby8nKTtcbiAgICBjb25zdCBidXR0b24gPSBhd2FpdCBkcml2ZXIuJCgnI2Rvd25sb2FkTGluaycpO1xuICAgIGF3YWl0IGJ1dHRvbi5nZXRUZXh0KCkuc2hvdWxkLmV2ZW50dWFsbHkuZXFsKCdEb3dubG9hZCBBcHBpdW0nKTtcbiAgfSk7XG59KTtcblxuXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBQSxjQUFLQyxNQUFMOztBQUNBRCxjQUFLRSxHQUFMLENBQVNDLHVCQUFUOztBQUVBLE1BQU1DLGdCQUFnQixHQUFHQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsZ0JBQVosSUFBZ0MsTUFBekQ7QUFDQSxNQUFNRyxXQUFXLEdBQUdGLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxXQUFaLElBQTJCLG1CQUEvQztBQUNBLE1BQU1DLElBQUksR0FBRztFQUNYQyxXQUFXLEVBQUUsY0FERjtFQUVYQyxZQUFZLEVBQUUsS0FGSDtFQUdYLHVCQUF1QixJQUhaO0VBSVgsMEJBQTBCTixnQkFKZjtFQUtYLHFCQUFxQkc7QUFMVixDQUFiO0FBUUFJLFFBQVEsQ0FBQyxxQkFBRCxFQUF3QixZQUFZO0VBQzFDLEtBQUtDLE9BQUwsQ0FBYUMsb0JBQWI7RUFFQSxJQUFJQyxNQUFKO0VBQ0EsSUFBSUMsTUFBSjtFQUNBQyxNQUFNLENBQUMsa0JBQWtCO0lBQ3ZCLElBQUlYLE9BQU8sQ0FBQ0MsR0FBUixDQUFZVyxFQUFoQixFQUFvQjtNQUlsQixPQUFPLEtBQUtDLElBQUwsRUFBUDtJQUNEOztJQUdELE1BQU1DLE1BQU0sR0FBRyxJQUFJQyxtQkFBSixFQUFmO0lBQ0EsTUFBTUMsVUFBVSxHQUFHLE1BQU1GLE1BQU0sQ0FBQ0csVUFBUCxDQUFrQmxCLGdCQUFsQixFQUFvQyxLQUFwQyxDQUF6QjtJQUNBLE1BQU1tQixNQUFNLEdBQUdGLFVBQVUsQ0FBQ0csSUFBWCxDQUFnQixDQUFDO01BQUNDO0lBQUQsQ0FBRCxLQUFZQSxJQUFJLEtBQUtsQixXQUFyQyxDQUFmOztJQUNBLElBQUksQ0FBQ2dCLE1BQUwsRUFBYTtNQUNYLE1BQU0sSUFBSUcsS0FBSixDQUFXLGdCQUFlbkIsV0FBWSxnQkFBZUgsZ0JBQWlCLEdBQXRFLENBQU47SUFDRDs7SUFDRCxJQUFJbUIsTUFBTSxDQUFDSSxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO01BQzdCUixNQUFNLENBQUNTLElBQVAsR0FBY0wsTUFBTSxDQUFDSyxJQUFyQjtNQUNBLE1BQU1ULE1BQU0sQ0FBQ1UsVUFBUCxFQUFOO01BQ0EsTUFBTVYsTUFBTSxDQUFDVyxnQkFBUCxFQUFOO0lBQ0Q7O0lBRURoQixNQUFNLEdBQUcsTUFBTSxtQkFBWWlCLFdBQVosRUFBa0JDLFdBQWxCLENBQWY7RUFDRCxDQXRCSyxDQUFOO0VBdUJBQyxLQUFLLENBQUMsa0JBQWtCO0lBQ3RCLElBQUluQixNQUFKLEVBQVk7TUFDVixNQUFNQSxNQUFNLENBQUNvQixLQUFQLEVBQU47TUFDQXBCLE1BQU0sR0FBRyxJQUFUO0lBQ0Q7RUFDRixDQUxJLENBQUw7RUFNQXFCLFVBQVUsQ0FBQyxrQkFBa0I7SUFDM0JwQixNQUFNLEdBQUcsTUFBTSx5QkFBTztNQUNwQnFCLFFBQVEsRUFBRUosV0FEVTtNQUVwQkssSUFBSSxFQUFFTixXQUZjO01BR3BCTyxZQUFZLEVBQUU5QjtJQUhNLENBQVAsQ0FBZjtFQUtELENBTlMsQ0FBVjtFQU9BK0IsU0FBUyxDQUFDLGtCQUFrQjtJQUMxQixJQUFJeEIsTUFBSixFQUFZO01BQ1YsTUFBTUEsTUFBTSxDQUFDeUIsYUFBUCxFQUFOO01BQ0F6QixNQUFNLEdBQUcsSUFBVDtJQUNEO0VBQ0YsQ0FMUSxDQUFUO0VBT0EwQixFQUFFLENBQUMsaUNBQUQsRUFBb0Msa0JBQWtCO0lBQ3RELE1BQU0xQixNQUFNLENBQUMyQixHQUFQLENBQVcsb0JBQVgsQ0FBTjtJQUNBLE1BQU1DLE1BQU0sR0FBRyxNQUFNNUIsTUFBTSxDQUFDNkIsQ0FBUCxDQUFTLGVBQVQsQ0FBckI7SUFDQSxNQUFNRCxNQUFNLENBQUNFLE9BQVAsR0FBaUI1QyxNQUFqQixDQUF3QjZDLFVBQXhCLENBQW1DQyxHQUFuQyxDQUF1QyxpQkFBdkMsQ0FBTjtFQUNELENBSkMsQ0FBRjtBQUtELENBckRPLENBQVIifQ==
|
|
@@ -17,4 +17,4 @@ describe('SafariDriver', function () {
|
|
|
17
17
|
});require('source-map-support').install();
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC91bml0L2RyaXZlci1zcGVjcy5qcyIsIm5hbWVzIjpbInNob3VsZCIsImNoYWkiLCJkZXNjcmliZSIsIml0IiwiZXhpc3QiLCJTYWZhcmlEcml2ZXIiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJ0ZXN0L3VuaXQvZHJpdmVyLXNwZWNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTYWZhcmlEcml2ZXIgZnJvbSAnLi4vLi4nO1xuaW1wb3J0IGNoYWkgZnJvbSAnY2hhaSc7XG5jb25zdCBzaG91bGQgPSBjaGFpLnNob3VsZCgpO1xuXG5kZXNjcmliZSgnU2FmYXJpRHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGV4aXN0JywgZnVuY3Rpb24gKCkge1xuICAgIHNob3VsZC5leGlzdChTYWZhcmlEcml2ZXIpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQSxNQUFNQSxNQUFNLEdBQUdDLGNBQUtELE1BQUwsRUFBZjs7QUFFQUUsUUFBUSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtFQUNuQ0MsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtJQUM3QkgsTUFBTSxDQUFDSSxLQUFQLENBQWFDLFNBQWI7RUFDRCxDQUZDLENBQUY7QUFHRCxDQUpPLENBQVIifQ==
|
|
@@ -48,4 +48,4 @@ describe('formatCapsForServer', function () {
|
|
|
48
48
|
});require('source-map-support').install();
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC91bml0L3V0aWxzLXNwZWNzLmpzIiwibmFtZXMiOlsiY2hhaSIsInNob3VsZCIsImRlc2NyaWJlIiwiaXQiLCJyZXN1bHQiLCJlcWwiLCJicm93c2VyTmFtZSIsImJyb3dzZXJWZXJzaW9uIiwidW5kZWZpbmVkIiwicGxhdGZvcm1OYW1lIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsidGVzdC91bml0L3V0aWxzLXNwZWNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdENhcHNGb3JTZXJ2ZXIgfSBmcm9tICcuLi8uLi9saWIvdXRpbHMnO1xuaW1wb3J0IGNoYWkgZnJvbSAnY2hhaSc7XG5cbmNoYWkuc2hvdWxkKCk7XG5cbmRlc2NyaWJlKCdmb3JtYXRDYXBzRm9yU2VydmVyJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGZvcm1hdCBlbXB0eSBjYXBzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdENhcHNGb3JTZXJ2ZXIoe30pO1xuICAgIHJlc3VsdC5zaG91bGQuZXFsKHtcbiAgICAgIGJyb3dzZXJOYW1lOiAnU2FmYXJpJyxcbiAgICAgIGJyb3dzZXJWZXJzaW9uOiB1bmRlZmluZWQsXG4gICAgICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFzc2lnbiBkZWZhdWx0IGNhcHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0Q2Fwc0ZvclNlcnZlcih7XG4gICAgICBicm93c2VyTmFtZTogJ3lvbG8nLFxuICAgICAgYnJvd3NlclZlcnNpb246ICcxMicsXG4gICAgICBwbGF0Zm9ybU5hbWU6ICdtYWMnLFxuICAgIH0pO1xuICAgIHJlc3VsdC5zaG91bGQuZXFsKHtcbiAgICAgIGJyb3dzZXJOYW1lOiAnU2FmYXJpJyxcbiAgICAgIGJyb3dzZXJWZXJzaW9uOiAnMTInLFxuICAgICAgcGxhdGZvcm1OYW1lOiAnbWFjJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBvbmx5IHBhc3MgY2FwcyB3aXRoIHN1cHBvcnRlZCBwcmVmaXhlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRDYXBzRm9yU2VydmVyKHtcbiAgICAgICdzYWZhcmk6ZGV2aWNlVURJRCc6ICcxMjM0JyxcbiAgICAgICd3ZWJraXQ6eW9sbyc6ICc1NjcnLFxuICAgICAgJ2FwcGl1bTpiYXInOiAnNzg5JyxcbiAgICB9KTtcbiAgICByZXN1bHQuc2hvdWxkLmVxbCh7XG4gICAgICBicm93c2VyTmFtZTogJ1NhZmFyaScsXG4gICAgICBicm93c2VyVmVyc2lvbjogdW5kZWZpbmVkLFxuICAgICAgcGxhdGZvcm1OYW1lOiAnaU9TJyxcbiAgICAgICdzYWZhcmk6ZGV2aWNlVURJRCc6ICcxMjM0JyxcbiAgICAgICd3ZWJraXQ6eW9sbyc6ICc1NjcnLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFFQUEsY0FBS0MsTUFBTDs7QUFFQUMsUUFBUSxDQUFDLHFCQUFELEVBQXdCLFlBQVk7RUFDMUNDLEVBQUUsQ0FBQywwQkFBRCxFQUE2QixZQUFZO0lBQ3pDLE1BQU1DLE1BQU0sR0FBRyxnQ0FBb0IsRUFBcEIsQ0FBZjtJQUNBQSxNQUFNLENBQUNILE1BQVAsQ0FBY0ksR0FBZCxDQUFrQjtNQUNoQkMsV0FBVyxFQUFFLFFBREc7TUFFaEJDLGNBQWMsRUFBRUMsU0FGQTtNQUdoQkMsWUFBWSxFQUFFO0lBSEUsQ0FBbEI7RUFLRCxDQVBDLENBQUY7RUFTQU4sRUFBRSxDQUFDLDRCQUFELEVBQStCLFlBQVk7SUFDM0MsTUFBTUMsTUFBTSxHQUFHLGdDQUFvQjtNQUNqQ0UsV0FBVyxFQUFFLE1BRG9CO01BRWpDQyxjQUFjLEVBQUUsSUFGaUI7TUFHakNFLFlBQVksRUFBRTtJQUhtQixDQUFwQixDQUFmO0lBS0FMLE1BQU0sQ0FBQ0gsTUFBUCxDQUFjSSxHQUFkLENBQWtCO01BQ2hCQyxXQUFXLEVBQUUsUUFERztNQUVoQkMsY0FBYyxFQUFFLElBRkE7TUFHaEJFLFlBQVksRUFBRTtJQUhFLENBQWxCO0VBS0QsQ0FYQyxDQUFGO0VBYUFOLEVBQUUsQ0FBQywrQ0FBRCxFQUFrRCxZQUFZO0lBQzlELE1BQU1DLE1BQU0sR0FBRyxnQ0FBb0I7TUFDakMscUJBQXFCLE1BRFk7TUFFakMsZUFBZSxLQUZrQjtNQUdqQyxjQUFjO0lBSG1CLENBQXBCLENBQWY7SUFLQUEsTUFBTSxDQUFDSCxNQUFQLENBQWNJLEdBQWQsQ0FBa0I7TUFDaEJDLFdBQVcsRUFBRSxRQURHO01BRWhCQyxjQUFjLEVBQUVDLFNBRkE7TUFHaEJDLFlBQVksRUFBRSxLQUhFO01BSWhCLHFCQUFxQixNQUpMO01BS2hCLGVBQWU7SUFMQyxDQUFsQjtFQU9ELENBYkMsQ0FBRjtBQWNELENBckNPLENBQVIifQ==
|
package/build/test/utils.js
CHANGED
|
@@ -15,4 +15,4 @@ const MOCHA_TIMEOUT = 240000;
|
|
|
15
15
|
exports.MOCHA_TIMEOUT = MOCHA_TIMEOUT;require('source-map-support').install();
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC91dGlscy5qcyIsIm5hbWVzIjpbIkhPU1QiLCJQT1JUIiwiTU9DSEFfVElNRU9VVCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbInRlc3QvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgUE9SVCA9IDQ1Njc7XG5jb25zdCBNT0NIQV9USU1FT1VUID0gMjQwMDAwO1xuXG5leHBvcnQgeyBIT1NULCBQT1JULCBNT0NIQV9USU1FT1VUIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE1BQU1BLElBQUksR0FBRyxXQUFiOztBQUNBLE1BQU1DLElBQUksR0FBRyxJQUFiOztBQUNBLE1BQU1DLGFBQWEsR0FBRyxNQUF0QiJ9
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import { util, fs, net, tempDir } from '@appium/support';
|
|
3
3
|
import { waitForCondition } from 'asyncbox';
|
|
4
|
-
import log from '../logger';
|
|
5
4
|
import Simctl from 'node-simctl';
|
|
6
5
|
|
|
7
6
|
|
|
@@ -16,8 +15,6 @@ const DEFAULT_EXT = '.mp4';
|
|
|
16
15
|
|
|
17
16
|
async function uploadRecordedMedia (localFile, remotePath = null, uploadOptions = {}) {
|
|
18
17
|
if (_.isEmpty(remotePath)) {
|
|
19
|
-
const {size} = await fs.stat(localFile);
|
|
20
|
-
log.debug(`The size of the resulting screen recording is ${util.toReadableSizeString(size)}`);
|
|
21
18
|
return (await util.toInMemoryBase64(localFile)).toString();
|
|
22
19
|
}
|
|
23
20
|
|
|
@@ -45,7 +42,8 @@ process.on('exit', () => {
|
|
|
45
42
|
});
|
|
46
43
|
|
|
47
44
|
class ScreenRecorder {
|
|
48
|
-
constructor (udid, videoPath, opts = {}) {
|
|
45
|
+
constructor (udid, videoPath, log, opts = {}) {
|
|
46
|
+
this.log = log;
|
|
49
47
|
this._process = null;
|
|
50
48
|
this._udid = udid;
|
|
51
49
|
this._videoPath = videoPath;
|
|
@@ -70,7 +68,7 @@ class ScreenRecorder {
|
|
|
70
68
|
|
|
71
69
|
async _enforceTermination () {
|
|
72
70
|
if (this.isRunning) {
|
|
73
|
-
log.debug('Force-stopping the currently running video recording');
|
|
71
|
+
this.log.debug('Force-stopping the currently running video recording');
|
|
74
72
|
try {
|
|
75
73
|
await this._process.stop('SIGKILL');
|
|
76
74
|
} catch (ign) {}
|
|
@@ -102,20 +100,20 @@ class ScreenRecorder {
|
|
|
102
100
|
args,
|
|
103
101
|
asynchronous: true,
|
|
104
102
|
});
|
|
105
|
-
log.debug(`Starting video recording with arguments: ${util.quote(args)}`);
|
|
103
|
+
this.log.debug(`Starting video recording with arguments: ${util.quote(args)}`);
|
|
106
104
|
this._process.on('output', (stdout, stderr) => {
|
|
107
105
|
const line = _.trim(stdout || stderr);
|
|
108
106
|
if (line) {
|
|
109
|
-
log.debug(`[recordVideo@${this._udid.substring(0, 8)}] ${line}`);
|
|
107
|
+
this.log.debug(`[recordVideo@${this._udid.substring(0, 8)}] ${line}`);
|
|
110
108
|
}
|
|
111
109
|
});
|
|
112
110
|
this._process.once('exit', async (code, signal) => {
|
|
113
111
|
this._process = null;
|
|
114
112
|
if (code === 0) {
|
|
115
|
-
log.debug('Screen recording exited without errors');
|
|
113
|
+
this.log.debug('Screen recording exited without errors');
|
|
116
114
|
} else {
|
|
117
115
|
await this._enforceTermination();
|
|
118
|
-
log.warn(`Screen recording exited with error code ${code}, signal ${signal}`);
|
|
116
|
+
this.log.warn(`Screen recording exited with error code ${code}, signal ${signal}`);
|
|
119
117
|
}
|
|
120
118
|
});
|
|
121
119
|
await this._process.start(0);
|
|
@@ -131,7 +129,7 @@ class ScreenRecorder {
|
|
|
131
129
|
});
|
|
132
130
|
} catch (e) {
|
|
133
131
|
await this._enforceTermination();
|
|
134
|
-
log.errorAndThrow(`The expected screen record file '${this._videoPath}' does not exist after ${STARTUP_TIMEOUT_MS}ms. ` +
|
|
132
|
+
this.log.errorAndThrow(`The expected screen record file '${this._videoPath}' does not exist after ${STARTUP_TIMEOUT_MS}ms. ` +
|
|
135
133
|
`Check the server log for more details`);
|
|
136
134
|
}
|
|
137
135
|
this._timer = setTimeout(async () => {
|
|
@@ -139,11 +137,11 @@ class ScreenRecorder {
|
|
|
139
137
|
try {
|
|
140
138
|
await this.stop();
|
|
141
139
|
} catch (e) {
|
|
142
|
-
log.error(e);
|
|
140
|
+
this.log.error(e);
|
|
143
141
|
}
|
|
144
142
|
}
|
|
145
143
|
}, this._timeLimitMs);
|
|
146
|
-
log.info(`The video recording has started. Will timeout in ${this._timeLimitMs}ms`);
|
|
144
|
+
this.log.info(`The video recording has started. Will timeout in ${this._timeLimitMs}ms`);
|
|
147
145
|
}
|
|
148
146
|
|
|
149
147
|
async stop (force = false) {
|
|
@@ -157,7 +155,7 @@ class ScreenRecorder {
|
|
|
157
155
|
}
|
|
158
156
|
|
|
159
157
|
if (!this.isRunning) {
|
|
160
|
-
log.debug('Screen recording is not running. Returning the recently recorded video');
|
|
158
|
+
this.log.debug('Screen recording is not running. Returning the recently recorded video');
|
|
161
159
|
return await this.getVideoPath();
|
|
162
160
|
}
|
|
163
161
|
|
|
@@ -229,12 +227,12 @@ commands.startRecordingScreen = async function startRecordingScreen (options = {
|
|
|
229
227
|
forceRestart = true,
|
|
230
228
|
} = options;
|
|
231
229
|
if (this._screenRecorder?.isRunning) {
|
|
232
|
-
log.info('The screen recording is already running');
|
|
230
|
+
this.log.info('The screen recording is already running');
|
|
233
231
|
if (!forceRestart) {
|
|
234
|
-
log.info('Doing nothing');
|
|
232
|
+
this.log.info('Doing nothing');
|
|
235
233
|
return;
|
|
236
234
|
}
|
|
237
|
-
log.info('Forcing the active screen recording to stop');
|
|
235
|
+
this.log.info('Forcing the active screen recording to stop');
|
|
238
236
|
await this._screenRecorder.stop(true);
|
|
239
237
|
}
|
|
240
238
|
this._screenRecorder = null;
|
|
@@ -249,7 +247,7 @@ commands.startRecordingScreen = async function startRecordingScreen (options = {
|
|
|
249
247
|
prefix: util.uuidV4().substring(0, 8),
|
|
250
248
|
suffix: DEFAULT_EXT,
|
|
251
249
|
});
|
|
252
|
-
this._screenRecorder = new ScreenRecorder(udid, videoPath, {
|
|
250
|
+
this._screenRecorder = new ScreenRecorder(udid, videoPath, this.log, {
|
|
253
251
|
timeLimit: parseInt(timeLimit, 10),
|
|
254
252
|
codec,
|
|
255
253
|
display,
|
|
@@ -294,16 +292,20 @@ commands.startRecordingScreen = async function startRecordingScreen (options = {
|
|
|
294
292
|
*/
|
|
295
293
|
commands.stopRecordingScreen = async function stopRecordingScreen (options = {}) {
|
|
296
294
|
if (!this._screenRecorder) {
|
|
297
|
-
log.info('No screen recording has been started. Doing nothing');
|
|
295
|
+
this.log.info('No screen recording has been started. Doing nothing');
|
|
298
296
|
return '';
|
|
299
297
|
}
|
|
300
298
|
|
|
301
|
-
log.debug('Retrieving the resulting video data');
|
|
299
|
+
this.log.debug('Retrieving the resulting video data');
|
|
302
300
|
const videoPath = await this._screenRecorder.stop();
|
|
303
301
|
if (!videoPath) {
|
|
304
|
-
log.info('No video data is found. Returning an empty string');
|
|
302
|
+
this.log.info('No video data is found. Returning an empty string');
|
|
305
303
|
return '';
|
|
306
304
|
}
|
|
305
|
+
if (_.isEmpty(options.remotePath)) {
|
|
306
|
+
const {size} = await fs.stat(videoPath);
|
|
307
|
+
this.log.debug(`The size of the resulting screen recording is ${util.toReadableSizeString(size)}`);
|
|
308
|
+
}
|
|
307
309
|
return await uploadRecordedMedia(videoPath, options.remotePath, options);
|
|
308
310
|
};
|
|
309
311
|
|
package/lib/driver.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import { BaseDriver } from '@appium/base-driver';
|
|
3
|
-
import log from './logger';
|
|
4
3
|
import SafariDriverServer from './safari';
|
|
5
4
|
import { desiredCapConstraints } from './desired-caps';
|
|
6
5
|
import commands from './commands/index';
|
|
@@ -57,7 +56,7 @@ class SafariDriver extends BaseDriver {
|
|
|
57
56
|
|
|
58
57
|
async createSession (...args) {
|
|
59
58
|
const [sessionId, caps] = await super.createSession(...args);
|
|
60
|
-
this.safari = new SafariDriverServer();
|
|
59
|
+
this.safari = new SafariDriverServer(this.log);
|
|
61
60
|
try {
|
|
62
61
|
await this.safari.start(formatCapsForServer(caps));
|
|
63
62
|
} catch (e) {
|
|
@@ -70,7 +69,7 @@ class SafariDriver extends BaseDriver {
|
|
|
70
69
|
}
|
|
71
70
|
|
|
72
71
|
async deleteSession () {
|
|
73
|
-
log.info('Ending Safari session');
|
|
72
|
+
this.log.info('Ending Safari session');
|
|
74
73
|
await this._screenRecorder?.stop(true);
|
|
75
74
|
await this.safari?.stop();
|
|
76
75
|
this.resetState();
|
package/lib/safari.js
CHANGED
|
@@ -7,8 +7,6 @@ import { waitForCondition } from 'asyncbox';
|
|
|
7
7
|
import { findAPortNotInUse } from 'portscanner';
|
|
8
8
|
import { execSync } from 'child_process';
|
|
9
9
|
|
|
10
|
-
const log = logger.getLogger('SafariDriverServer');
|
|
11
|
-
|
|
12
10
|
const SD_BINARY = 'safaridriver';
|
|
13
11
|
const STARTUP_TIMEOUT = 10000; // seconds
|
|
14
12
|
const SAFARI_PORT_RANGE = [5100, 5200];
|
|
@@ -31,9 +29,9 @@ class SafariProxy extends JWProxy {
|
|
|
31
29
|
}
|
|
32
30
|
}
|
|
33
31
|
|
|
34
|
-
|
|
35
32
|
class SafariDriverProcess {
|
|
36
33
|
constructor () {
|
|
34
|
+
this.log = logger.getLogger('SafariDriverProcess');
|
|
37
35
|
this.port = null;
|
|
38
36
|
this.proc = null;
|
|
39
37
|
}
|
|
@@ -68,12 +66,12 @@ class SafariDriverProcess {
|
|
|
68
66
|
this.proc = new SubProcess(safariBin, ['-p', this.port, '--diagnose']);
|
|
69
67
|
this.proc.on('output', (stdout, stderr) => {
|
|
70
68
|
const line = stdout || stderr;
|
|
71
|
-
log.debug(`[${SD_BINARY}] ${line}`);
|
|
69
|
+
this.log.debug(`[${SD_BINARY}] ${line}`);
|
|
72
70
|
});
|
|
73
71
|
this.proc.on('exit', (code, signal) => {
|
|
74
|
-
log.info(`${SD_BINARY} has exited with code ${code}, signal ${signal}`);
|
|
72
|
+
this.log.info(`${SD_BINARY} has exited with code ${code}, signal ${signal}`);
|
|
75
73
|
});
|
|
76
|
-
log.info(`Starting '${safariBin}' on port ${this.port}`);
|
|
74
|
+
this.log.info(`Starting '${safariBin}' on port ${this.port}`);
|
|
77
75
|
await this.proc.start(0);
|
|
78
76
|
});
|
|
79
77
|
}
|
|
@@ -98,7 +96,8 @@ process.once('exit', () => {
|
|
|
98
96
|
});
|
|
99
97
|
|
|
100
98
|
class SafariDriverServer {
|
|
101
|
-
constructor () {
|
|
99
|
+
constructor (log) {
|
|
100
|
+
this.log = log;
|
|
102
101
|
this.proxy = null;
|
|
103
102
|
}
|
|
104
103
|
|
|
@@ -113,6 +112,7 @@ class SafariDriverServer {
|
|
|
113
112
|
server: '127.0.0.1',
|
|
114
113
|
port: SAFARI_DRIVER_PROCESS.port,
|
|
115
114
|
base: '',
|
|
115
|
+
log: this.log,
|
|
116
116
|
keepAlive: true,
|
|
117
117
|
});
|
|
118
118
|
this.proxy.didProcessExit = false;
|
|
@@ -158,7 +158,7 @@ class SafariDriverServer {
|
|
|
158
158
|
|
|
159
159
|
async stop () {
|
|
160
160
|
if (!this.isRunning) {
|
|
161
|
-
log.info(`${SD_BINARY} session cannot be stopped, because the server is not running`);
|
|
161
|
+
this.log.info(`${SD_BINARY} session cannot be stopped, because the server is not running`);
|
|
162
162
|
return;
|
|
163
163
|
}
|
|
164
164
|
|
|
@@ -166,7 +166,7 @@ class SafariDriverServer {
|
|
|
166
166
|
try {
|
|
167
167
|
await this.proxy.command(`/session/${this.proxy.sessionId}`, 'DELETE');
|
|
168
168
|
} catch (e) {
|
|
169
|
-
log.info(`${SD_BINARY} session cannot be deleted. Original error: ${e.message}`);
|
|
169
|
+
this.log.info(`${SD_BINARY} session cannot be deleted. Original error: ${e.message}`);
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
}
|