appium-xcuitest-driver 4.3.0 → 4.3.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/README.md CHANGED
@@ -2,10 +2,8 @@
2
2
 
3
3
  [![NPM version](http://img.shields.io/npm/v/appium-xcuitest-driver.svg)](https://npmjs.org/package/appium-xcuitest-driver)
4
4
  [![Downloads](http://img.shields.io/npm/dm/appium-xcuitest-driver.svg)](https://npmjs.org/package/appium-xcuitest-driver)
5
- [![Dependency Status](https://david-dm.org/appium/appium-xcuitest-driver.svg)](https://david-dm.org/appium/appium-xcuitest-driver)
6
- [![devDependency Status](https://david-dm.org/appium/appium-xcuitest-driver/dev-status.svg)](https://david-dm.org/appium/appium-xcuitest-driver#info=devDependencies)
7
5
 
8
- [![Build Status](https://api.travis-ci.org/appium/appium-xcuitest-driver.png?branch=master)](https://travis-ci.org/appium/appium-xcuitest-driver)
6
+ [![Release](https://github.com/appium/appium-xcuitest-driver/actions/workflows/publish.js.yml/badge.svg)](https://github.com/appium/appium-xcuitest-driver/actions/workflows/publish.js.yml)
9
7
 
10
8
  Appium XCUITest Driver is a combined solution, which allows to perform automated black-box testing of iOS and tvOS native applications and WebKit web views.
11
9
  The native testing is based on Apple's [XCTest](https://developer.apple.com/documentation/xctest) framework and the fork of Facebook's [WebDriverAgent](https://github.com/appium/WebDriverAgent) server (the [original](https://github.com/facebookarchive/WebDriverAgent) project is not supported anymore).
@@ -55,6 +53,9 @@ See [real device configuration documentation](docs/real-device-config.md).
55
53
  - After many failures on real devices it could transition to a state where connections are no longer being accepted. To possibly remedy this issue reboot the device. Read https://github.com/facebook/WebDriverAgent/issues/507 for more details.
56
54
  - iPhone/iPad real devices show overlay, which has `Automation Running Hold both volume buttons to stop` text, since iOS/iPadOS 15. This is a known limitation of XCTest framework. This limitation does not affect screenshooting APIs though (e.g. the overlay is not visible on taken screenshots).
57
55
  - iPhone/iPad real devices [require passcode or touch id](https://github.com/appium/appium/issues/15898#issuecomment-927340411) when they start a XCTest session since iOS/iPadOS 15. Disabling passcode/touch id in the device preference allows to workaround the behaviour above.
56
+ - OpenSSL v3 breaks secured communication with real devices. It can cause a [Failed to receive any data within the timeout](https://github.com/appium/appium/issues/16399) error in [appium-ios-device](https://github.com/appium/appium-ios-device). Please read [this issue](https://github.com/appium/appium-ios-device/pull/88#discussion_r825315862) for more details.
57
+ - Please make sure your environment has Open SSL v1 for NodeJS environment, or prepare an OpenSSL v3 build by patching `OPENSSL_TLS_SECURITY_LEVEL=1`. (e.g. [an article](https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html))
58
+ - This configuration is only necessary for XCUITest driver v4.3.0 or lower.
58
59
 
59
60
  #### Weird state
60
61
 
@@ -507,7 +508,7 @@ Either `true` if the app was successfully terminated, otherwise `false`
507
508
 
508
509
  ### mobile: killApp
509
510
 
510
- Kill the given app on the real device under test by instruments service via [py-ios-device](https://github.com/YueChen-C/py-ios-device) if it is installed on the server machine.
511
+ Kill the given app on the real device under test by instruments service via [py-ios-device](https://github.com/YueChen-C/py-ios-device) if it is installed on the server machine since XCUITest driver 4.3.0.
511
512
  If the app is not running or failed to kill, then nothing is done.
512
513
  Note that this method takes a few more time than `mobile:terminateApp` for now since it calls the instruments service via external command, `py-ios-device`.
513
514
 
@@ -1355,3 +1356,5 @@ the tests locally. These include:
1355
1356
  the root directory of the repo with the extension "xcconfig")
1356
1357
  * `UICATALOG_REAL_DEVICE` - path to the real device build of UICatalog, in case
1357
1358
  the npm installed one is not built for real device
1359
+
1360
+
@@ -21,8 +21,8 @@ commands.mobileSetAppearance = async function mobileSetAppearance(opts = {}) {
21
21
  style
22
22
  } = opts;
23
23
 
24
- if (!style) {
25
- throw new Error(`The 'style' option is expected to be present`);
24
+ if (!['light', 'dark'].includes(_lodash.default.toLower(style))) {
25
+ throw new Error(`The 'style' value is expected to equal either 'light' or 'dark'`);
26
26
  }
27
27
 
28
28
  if (_support.util.compareVersions(this.opts.platformVersion, '<', '12.0')) {
@@ -32,7 +32,17 @@ commands.mobileSetAppearance = async function mobileSetAppearance(opts = {}) {
32
32
  if (this.isSimulator()) {
33
33
  try {
34
34
  return void (await this.opts.device.setAppearance(style));
35
- } catch (ign) {}
35
+ } catch (e) {
36
+ this.log.debug(e.stack);
37
+ }
38
+ }
39
+
40
+ try {
41
+ return void (await this.proxyCommand('/wda/device/appearance', 'POST', {
42
+ name: style
43
+ }));
44
+ } catch (e) {
45
+ this.log.debug(e.stack);
36
46
  }
37
47
 
38
48
  await this.mobileSiriCommand({
@@ -66,4 +76,4 @@ var _default = commands;
66
76
  exports.default = _default;require('source-map-support').install();
67
77
 
68
78
 
69
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHBlYXJhbmNlLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwibW9iaWxlU2V0QXBwZWFyYW5jZSIsIm9wdHMiLCJzdHlsZSIsIkVycm9yIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsInBsYXRmb3JtVmVyc2lvbiIsImlzU2ltdWxhdG9yIiwiZGV2aWNlIiwic2V0QXBwZWFyYW5jZSIsImlnbiIsIm1vYmlsZVNpcmlDb21tYW5kIiwidGV4dCIsIl8iLCJ0b0xvd2VyIiwibW9iaWxlR2V0QXBwZWFyYW5jZSIsImdldEFwcGVhcmFuY2UiLCJwcm94eUNvbW1hbmQiLCJ1c2VySW50ZXJmYWNlU3R5bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOzs7QUFrQkFBLFFBQVEsQ0FBQ0MsbUJBQVQsR0FBK0IsZUFBZUEsbUJBQWYsQ0FBb0NDLElBQUksR0FBRyxFQUEzQyxFQUErQztBQUM1RSxRQUFNO0FBQ0pDLElBQUFBO0FBREksTUFFRkQsSUFGSjs7QUFHQSxNQUFJLENBQUNDLEtBQUwsRUFBWTtBQUNWLFVBQU0sSUFBSUMsS0FBSixDQUFXLDhDQUFYLENBQU47QUFDRDs7QUFDRCxNQUFJQyxjQUFLQyxlQUFMLENBQXFCLEtBQUtKLElBQUwsQ0FBVUssZUFBL0IsRUFBZ0QsR0FBaEQsRUFBcUQsTUFBckQsQ0FBSixFQUFrRTtBQUNoRSxVQUFNLElBQUlILEtBQUosQ0FBVSxvREFBVixDQUFOO0FBQ0Q7O0FBRUQsTUFBSSxLQUFLSSxXQUFMLEVBQUosRUFBd0I7QUFDdEIsUUFBSTtBQUNGLGFBQU8sTUFBTSxNQUFNLEtBQUtOLElBQUwsQ0FBVU8sTUFBVixDQUFpQkMsYUFBakIsQ0FBK0JQLEtBQS9CLENBQVosQ0FBUDtBQUNELEtBRkQsQ0FFRSxPQUFPUSxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFHRCxRQUFNLEtBQUtDLGlCQUFMLENBQXVCO0FBQzNCQyxJQUFBQSxJQUFJLEVBQUcsUUFBT0MsZ0JBQUVDLE9BQUYsQ0FBVVosS0FBVixNQUFxQixNQUFyQixHQUE4QixJQUE5QixHQUFxQyxLQUFNO0FBRDlCLEdBQXZCLENBQU47QUFHRCxDQXJCRDs7QUF1Q0FILFFBQVEsQ0FBQ2dCLG1CQUFULEdBQStCLGVBQWVBLG1CQUFmLEdBQXNDO0FBQ25FLE1BQUlYLGNBQUtDLGVBQUwsQ0FBcUIsS0FBS0osSUFBTCxDQUFVSyxlQUEvQixFQUFnRCxHQUFoRCxFQUFxRCxNQUFyRCxDQUFKLEVBQWtFO0FBQ2hFLFdBQU8sYUFBUDtBQUNEOztBQUVELE1BQUlKLEtBQUo7O0FBQ0EsTUFBSSxLQUFLSyxXQUFMLEVBQUosRUFBd0I7QUFDdEIsUUFBSTtBQUNGTCxNQUFBQSxLQUFLLEdBQUcsTUFBTSxLQUFLRCxJQUFMLENBQVVPLE1BQVYsQ0FBaUJRLGFBQWpCLEVBQWQ7QUFDRCxLQUZELENBRUUsT0FBT04sR0FBUCxFQUFZLENBQUU7QUFDakI7O0FBQ0QsTUFBSSxDQUFDUixLQUFMLEVBQVk7QUFDVkEsSUFBQUEsS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLZSxZQUFMLENBQWtCLGtCQUFsQixFQUFzQyxLQUF0QyxDQUFQLEVBQXFEQyxrQkFBckQsSUFBMkUsU0FBbkY7QUFDRDs7QUFDRCxTQUFPO0FBQ0xoQixJQUFBQTtBQURLLEdBQVA7QUFHRCxDQWpCRDs7ZUFxQmVILFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXRBcHBlYXJhbmNlT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHlsZSAtIEN1cnJlbnRseSB0d28gc3R5bGVzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIGRhcmtcbiAqIC0gbGlnaHRcbiAqL1xuXG4vKipcbiAqIFNldCB0aGUgZGV2aWNlJ3MgVUkgYXBwZWFyYW5jZSBzdHlsZVxuICpcbiAqIEBzaW5jZSBpT1MgMTIuMFxuICogQHBhcmFtIHtTZXRBcHBlYXJhbmNlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBjdXJyZW50IHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgVUlcbiAqIGFwcGVhcmFuY2UgY2hhbmdlc1xuICovXG5jb21tYW5kcy5tb2JpbGVTZXRBcHBlYXJhbmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0QXBwZWFyYW5jZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZSxcbiAgfSA9IG9wdHM7XG4gIGlmICghc3R5bGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc3R5bGUnIG9wdGlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50YCk7XG4gIH1cbiAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjAnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbmdpbmcgYXBwZWFyYW5jZSBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSBpT1MgMTInKTtcbiAgfVxuXG4gIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHZvaWQgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0QXBwZWFyYW5jZShzdHlsZSkpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICAvLyBGYWxsIGJhY2sgdG8gdGhlIHVnbHkgU2lyaSB3b3JrYXJvdW5kIGlmIHRoZSBzaW11bGF0b3IgaXMgdG9vIG9sZFxuICAvLyBvciB0aGlzIGlzIGEgcmVhbCBkZXZpY2VcbiAgYXdhaXQgdGhpcy5tb2JpbGVTaXJpQ29tbWFuZCh7XG4gICAgdGV4dDogYFR1cm4gJHtfLnRvTG93ZXIoc3R5bGUpID09PSAnZGFyaycgPyAnb24nIDogJ29mZid9IGRhcmsgbW9kZWAsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcHBlYXJhbmNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3R5bGUgLSBUaGUgZGV2aWNlJ3MgVUkgYXBwZWFyYW5jZSB2YWx1ZS5cbiAqIFRoaXMgY291bGQgYmUgb25lIG9mOlxuICogLSBgbGlnaHRgXG4gKiAtIGBkYXJrYFxuICogLSBgdW5rbm93bmBcbiAqIC0gYHVuc3VwcG9ydGVkYFxuICovXG5cbi8qKlxuICogR2V0IHRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHN0eWxlLlxuICpcbiAqIEBzaW5jZSBYY29kZSBTREsgMTFcbiAqIEByZXR1cm5zIHtBcHBlYXJhbmNlfVxuICovXG5jb21tYW5kcy5tb2JpbGVHZXRBcHBlYXJhbmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0QXBwZWFyYW5jZSAoKSB7XG4gIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4wJykpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkJztcbiAgfVxuXG4gIGxldCBzdHlsZTtcbiAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRyeSB7XG4gICAgICBzdHlsZSA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0QXBwZWFyYW5jZSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIXN0eWxlKSB7XG4gICAgc3R5bGUgPSAoYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvZGV2aWNlL2luZm8nLCAnR0VUJykpLnVzZXJJbnRlcmZhY2VTdHlsZSB8fCAndW5rbm93bic7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdHlsZSxcbiAgfTtcbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvYXBwZWFyYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
79
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHBlYXJhbmNlLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwibW9iaWxlU2V0QXBwZWFyYW5jZSIsIm9wdHMiLCJzdHlsZSIsImluY2x1ZGVzIiwiXyIsInRvTG93ZXIiLCJFcnJvciIsInV0aWwiLCJjb21wYXJlVmVyc2lvbnMiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc1NpbXVsYXRvciIsImRldmljZSIsInNldEFwcGVhcmFuY2UiLCJlIiwibG9nIiwiZGVidWciLCJzdGFjayIsInByb3h5Q29tbWFuZCIsIm5hbWUiLCJtb2JpbGVTaXJpQ29tbWFuZCIsInRleHQiLCJtb2JpbGVHZXRBcHBlYXJhbmNlIiwiZ2V0QXBwZWFyYW5jZSIsImlnbiIsInVzZXJJbnRlcmZhY2VTdHlsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7OztBQWtCQUEsUUFBUSxDQUFDQyxtQkFBVCxHQUErQixlQUFlQSxtQkFBZixDQUFvQ0MsSUFBSSxHQUFHLEVBQTNDLEVBQStDO0FBQzVFLFFBQU07QUFDSkMsSUFBQUE7QUFESSxNQUVGRCxJQUZKOztBQUdBLE1BQUksQ0FBQyxDQUFDLE9BQUQsRUFBVSxNQUFWLEVBQWtCRSxRQUFsQixDQUEyQkMsZ0JBQUVDLE9BQUYsQ0FBVUgsS0FBVixDQUEzQixDQUFMLEVBQW1EO0FBQ2pELFVBQU0sSUFBSUksS0FBSixDQUFXLGlFQUFYLENBQU47QUFDRDs7QUFDRCxNQUFJQyxjQUFLQyxlQUFMLENBQXFCLEtBQUtQLElBQUwsQ0FBVVEsZUFBL0IsRUFBZ0QsR0FBaEQsRUFBcUQsTUFBckQsQ0FBSixFQUFrRTtBQUNoRSxVQUFNLElBQUlILEtBQUosQ0FBVSxvREFBVixDQUFOO0FBQ0Q7O0FBRUQsTUFBSSxLQUFLSSxXQUFMLEVBQUosRUFBd0I7QUFDdEIsUUFBSTtBQUNGLGFBQU8sTUFBTSxNQUFNLEtBQUtULElBQUwsQ0FBVVUsTUFBVixDQUFpQkMsYUFBakIsQ0FBK0JWLEtBQS9CLENBQVosQ0FBUDtBQUNELEtBRkQsQ0FFRSxPQUFPVyxDQUFQLEVBQVU7QUFDVixXQUFLQyxHQUFMLENBQVNDLEtBQVQsQ0FBZUYsQ0FBQyxDQUFDRyxLQUFqQjtBQUNEO0FBQ0Y7O0FBQ0QsTUFBSTtBQUNGLFdBQU8sTUFBTSxNQUFNLEtBQUtDLFlBQUwsQ0FBa0Isd0JBQWxCLEVBQTRDLE1BQTVDLEVBQW9EO0FBQUNDLE1BQUFBLElBQUksRUFBRWhCO0FBQVAsS0FBcEQsQ0FBWixDQUFQO0FBQ0QsR0FGRCxDQUVFLE9BQU9XLENBQVAsRUFBVTtBQUNWLFNBQUtDLEdBQUwsQ0FBU0MsS0FBVCxDQUFlRixDQUFDLENBQUNHLEtBQWpCO0FBQ0Q7O0FBRUQsUUFBTSxLQUFLRyxpQkFBTCxDQUF1QjtBQUMzQkMsSUFBQUEsSUFBSSxFQUFHLFFBQU9oQixnQkFBRUMsT0FBRixDQUFVSCxLQUFWLE1BQXFCLE1BQXJCLEdBQThCLElBQTlCLEdBQXFDLEtBQU07QUFEOUIsR0FBdkIsQ0FBTjtBQUdELENBM0JEOztBQTZDQUgsUUFBUSxDQUFDc0IsbUJBQVQsR0FBK0IsZUFBZUEsbUJBQWYsR0FBc0M7QUFDbkUsTUFBSWQsY0FBS0MsZUFBTCxDQUFxQixLQUFLUCxJQUFMLENBQVVRLGVBQS9CLEVBQWdELEdBQWhELEVBQXFELE1BQXJELENBQUosRUFBa0U7QUFDaEUsV0FBTyxhQUFQO0FBQ0Q7O0FBRUQsTUFBSVAsS0FBSjs7QUFDQSxNQUFJLEtBQUtRLFdBQUwsRUFBSixFQUF3QjtBQUN0QixRQUFJO0FBQ0ZSLE1BQUFBLEtBQUssR0FBRyxNQUFNLEtBQUtELElBQUwsQ0FBVVUsTUFBVixDQUFpQlcsYUFBakIsRUFBZDtBQUNELEtBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFDRCxNQUFJLENBQUNyQixLQUFMLEVBQVk7QUFDVkEsSUFBQUEsS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLZSxZQUFMLENBQWtCLGtCQUFsQixFQUFzQyxLQUF0QyxDQUFQLEVBQXFETyxrQkFBckQsSUFBMkUsU0FBbkY7QUFDRDs7QUFDRCxTQUFPO0FBQ0x0QixJQUFBQTtBQURLLEdBQVA7QUFHRCxDQWpCRDs7ZUFxQmVILFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXRBcHBlYXJhbmNlT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHlsZSAtIEN1cnJlbnRseSB0d28gc3R5bGVzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIGRhcmtcbiAqIC0gbGlnaHRcbiAqL1xuXG4vKipcbiAqIFNldCB0aGUgZGV2aWNlJ3MgVUkgYXBwZWFyYW5jZSBzdHlsZVxuICpcbiAqIEBzaW5jZSBpT1MgMTIuMFxuICogQHBhcmFtIHtTZXRBcHBlYXJhbmNlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBjdXJyZW50IHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgVUlcbiAqIGFwcGVhcmFuY2UgY2hhbmdlc1xuICovXG5jb21tYW5kcy5tb2JpbGVTZXRBcHBlYXJhbmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0QXBwZWFyYW5jZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZSxcbiAgfSA9IG9wdHM7XG4gIGlmICghWydsaWdodCcsICdkYXJrJ10uaW5jbHVkZXMoXy50b0xvd2VyKHN0eWxlKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc3R5bGUnIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGVxdWFsIGVpdGhlciAnbGlnaHQnIG9yICdkYXJrJ2ApO1xuICB9XG4gIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4wJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5naW5nIGFwcGVhcmFuY2UgaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgaU9TIDEyJyk7XG4gIH1cblxuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB2b2lkIChhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNldEFwcGVhcmFuY2Uoc3R5bGUpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlLnN0YWNrKTtcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gdm9pZCAoYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvZGV2aWNlL2FwcGVhcmFuY2UnLCAnUE9TVCcsIHtuYW1lOiBzdHlsZX0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICB9XG4gIC8vIEZhbGwgYmFjayB0byB0aGUgdWdseSBTaXJpIHdvcmthcm91bmQgaWYgdGhlIGN1cnJlbnQgU0RLIGlzIHRvbyBvbGRcbiAgYXdhaXQgdGhpcy5tb2JpbGVTaXJpQ29tbWFuZCh7XG4gICAgdGV4dDogYFR1cm4gJHtfLnRvTG93ZXIoc3R5bGUpID09PSAnZGFyaycgPyAnb24nIDogJ29mZid9IGRhcmsgbW9kZWAsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcHBlYXJhbmNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3R5bGUgLSBUaGUgZGV2aWNlJ3MgVUkgYXBwZWFyYW5jZSB2YWx1ZS5cbiAqIFRoaXMgY291bGQgYmUgb25lIG9mOlxuICogLSBgbGlnaHRgXG4gKiAtIGBkYXJrYFxuICogLSBgdW5rbm93bmBcbiAqIC0gYHVuc3VwcG9ydGVkYFxuICovXG5cbi8qKlxuICogR2V0IHRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHN0eWxlLlxuICpcbiAqIEBzaW5jZSBYY29kZSBTREsgMTFcbiAqIEByZXR1cm5zIHtBcHBlYXJhbmNlfVxuICovXG5jb21tYW5kcy5tb2JpbGVHZXRBcHBlYXJhbmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0QXBwZWFyYW5jZSAoKSB7XG4gIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4wJykpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkJztcbiAgfVxuXG4gIGxldCBzdHlsZTtcbiAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRyeSB7XG4gICAgICBzdHlsZSA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0QXBwZWFyYW5jZSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIXN0eWxlKSB7XG4gICAgc3R5bGUgPSAoYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvZGV2aWNlL2luZm8nLCAnR0VUJykpLnVzZXJJbnRlcmZhY2VTdHlsZSB8fCAndW5rbm93bic7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdHlsZSxcbiAgfTtcbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvYXBwZWFyYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -24,8 +24,8 @@ commands.mobileSetAppearance = async function mobileSetAppearance (opts = {}) {
24
24
  const {
25
25
  style,
26
26
  } = opts;
27
- if (!style) {
28
- throw new Error(`The 'style' option is expected to be present`);
27
+ if (!['light', 'dark'].includes(_.toLower(style))) {
28
+ throw new Error(`The 'style' value is expected to equal either 'light' or 'dark'`);
29
29
  }
30
30
  if (util.compareVersions(this.opts.platformVersion, '<', '12.0')) {
31
31
  throw new Error('Changing appearance is only supported since iOS 12');
@@ -34,10 +34,16 @@ commands.mobileSetAppearance = async function mobileSetAppearance (opts = {}) {
34
34
  if (this.isSimulator()) {
35
35
  try {
36
36
  return void (await this.opts.device.setAppearance(style));
37
- } catch (ign) {}
37
+ } catch (e) {
38
+ this.log.debug(e.stack);
39
+ }
40
+ }
41
+ try {
42
+ return void (await this.proxyCommand('/wda/device/appearance', 'POST', {name: style}));
43
+ } catch (e) {
44
+ this.log.debug(e.stack);
38
45
  }
39
- // Fall back to the ugly Siri workaround if the simulator is too old
40
- // or this is a real device
46
+ // Fall back to the ugly Siri workaround if the current SDK is too old
41
47
  await this.mobileSiriCommand({
42
48
  text: `Turn ${_.toLower(style) === 'dark' ? 'on' : 'off'} dark mode`,
43
49
  });