appium-safari-driver 2.1.0 → 2.2.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/.azure-pipelines.yml +3 -0
- package/README.md +69 -57
- package/azure-templates/node_setup_steps.yml +1 -0
- package/build/lib/driver.js +4 -4
- package/build/lib/safari.js +9 -5
- package/build/test/functional/desktop-driver-e2e-specs.js +6 -5
- package/build/test/functional/mobile-driver-e2e-specs.js +25 -8
- package/build/test/utils.js +18 -0
- package/lib/driver.js +4 -4
- package/lib/safari.js +6 -4
- package/package.json +2 -1
- package/test/functional/desktop-driver-e2e-specs.js +4 -2
- package/test/functional/mobile-driver-e2e-specs.js +17 -5
- package/test/utils.js +5 -0
package/.azure-pipelines.yml
CHANGED
package/README.md
CHANGED
|
@@ -37,14 +37,15 @@ webkit:WebRTC | This capability allows a test to temporarily change Safari's pol
|
|
|
37
37
|
## Example
|
|
38
38
|
|
|
39
39
|
```python
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
from appium import webdriver
|
|
43
|
-
import unittest
|
|
40
|
+
# Python3 + PyTest
|
|
41
|
+
import pytest
|
|
44
42
|
import time
|
|
45
43
|
|
|
44
|
+
from appium import webdriver
|
|
45
|
+
from selenium.webdriver.common.by import By
|
|
46
|
+
|
|
46
47
|
|
|
47
|
-
def
|
|
48
|
+
def generate_caps():
|
|
48
49
|
common_caps = {
|
|
49
50
|
# It does not really matter what to put there, although setting 'Safari' might cause a failure
|
|
50
51
|
# depending on the particular client library
|
|
@@ -64,7 +65,7 @@ def setup_module(module):
|
|
|
64
65
|
simulator_caps = {
|
|
65
66
|
**common_caps,
|
|
66
67
|
'platformName': 'iOS',
|
|
67
|
-
'safari:platformVersion': '14.1'
|
|
68
|
+
'safari:platformVersion': '14.1',
|
|
68
69
|
'safari:deviceName': 'iPad Air 2',
|
|
69
70
|
'safari:useSimulator': True,
|
|
70
71
|
}
|
|
@@ -72,57 +73,68 @@ def setup_module(module):
|
|
|
72
73
|
**common_caps,
|
|
73
74
|
'platformName': 'Mac',
|
|
74
75
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
76
|
+
return [real_device_caps, simulator_caps, desktop_browser_caps]
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@pytest.fixture(params=generate_caps())
|
|
80
|
+
def driver(request):
|
|
81
|
+
drv = webdriver.Remote('http://localhost:4723/wd/hub', request.param)
|
|
82
|
+
yield drv
|
|
83
|
+
drv.quit()
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class TimeoutError(Exception):
|
|
87
|
+
pass
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def wait_until_truthy(func, timeout_sec=5.0, interval_sec=0.5):
|
|
91
|
+
started = time.time()
|
|
92
|
+
original_error = None
|
|
93
|
+
while time.time() - started < timeout_sec:
|
|
94
|
+
original_error = None
|
|
95
|
+
try:
|
|
96
|
+
result = func()
|
|
97
|
+
if result:
|
|
98
|
+
return result
|
|
99
|
+
except Exception as e:
|
|
100
|
+
original_error = e
|
|
101
|
+
time.sleep(interval_sec)
|
|
102
|
+
if original_error is None:
|
|
103
|
+
raise TimeoutError(f'Condition unmet after {timeout_sec}s timeout')
|
|
104
|
+
raise original_error
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def test_feature_status_page_search(driver):
|
|
108
|
+
driver.get('https://webkit.org/status/')
|
|
109
|
+
|
|
110
|
+
# Enter "CSS" into the search box.
|
|
111
|
+
# Ensures that at least one result appears in search
|
|
112
|
+
# !!! Remember there are no ID and NAME locators in W3C standard
|
|
113
|
+
# These two have been superseded by CSS ones
|
|
114
|
+
search_box = driver.find_element_by_css('#search')
|
|
115
|
+
search_box.send_keys('CSS')
|
|
116
|
+
value = search_box.get_attribute('value')
|
|
117
|
+
assert len(value) > 0
|
|
118
|
+
search_box.submit()
|
|
119
|
+
# Count the visible results when filters are applied
|
|
120
|
+
# so one result shows up in at most one filter
|
|
121
|
+
assert wait_until_truthy(lambda: len(driver.execute_script("return document.querySelectorAll('li.feature:not(.is-hidden)')")) > 0)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def test_feature_status_page_filters(driver):
|
|
125
|
+
driver.get('https://webkit.org/status/')
|
|
126
|
+
|
|
127
|
+
assert wait_until_truthy(lambda: len(driver.execute_script("return document.querySelectorAll('.filter-toggle')")) == 7)
|
|
128
|
+
|
|
129
|
+
# Make sure every filter is turned off.
|
|
130
|
+
for checked_filter in filter(lambda f: f.is_selected(), filters):
|
|
131
|
+
checked_filter.click()
|
|
132
|
+
|
|
133
|
+
# Make sure you can select every filter.
|
|
134
|
+
for filt in filters:
|
|
135
|
+
filt.click()
|
|
136
|
+
assert filt.is_selected()
|
|
137
|
+
filt.click()
|
|
126
138
|
```
|
|
127
139
|
|
|
128
140
|
## Development
|
package/build/lib/driver.js
CHANGED
|
@@ -27,7 +27,7 @@ const NO_PROXY = [['GET', new RegExp('^/session/[^/]+/appium')], ['POST', new Re
|
|
|
27
27
|
|
|
28
28
|
class SafariDriver extends _appiumBaseDriver.BaseDriver {
|
|
29
29
|
constructor(opts = {}) {
|
|
30
|
-
super(opts
|
|
30
|
+
super(opts);
|
|
31
31
|
this.desiredCapConstraints = _desiredCaps.desiredCapConstraints;
|
|
32
32
|
this.locatorStrategies = ['xpath', 'tag name', 'link text', 'partial link text', 'css selector', 'id', 'name'];
|
|
33
33
|
this.resetState();
|
|
@@ -62,7 +62,7 @@ class SafariDriver extends _appiumBaseDriver.BaseDriver {
|
|
|
62
62
|
try {
|
|
63
63
|
await this.safari.start((0, _utils.formatCapsForServer)(caps));
|
|
64
64
|
} catch (e) {
|
|
65
|
-
await this.
|
|
65
|
+
await this.deleteSession();
|
|
66
66
|
throw e;
|
|
67
67
|
}
|
|
68
68
|
|
|
@@ -75,8 +75,8 @@ class SafariDriver extends _appiumBaseDriver.BaseDriver {
|
|
|
75
75
|
_logger.default.info('Ending Safari session');
|
|
76
76
|
|
|
77
77
|
await this.safari.stop();
|
|
78
|
-
await super.deleteSession();
|
|
79
78
|
this.resetState();
|
|
79
|
+
await super.deleteSession();
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
}
|
|
@@ -85,4 +85,4 @@ var _default = SafariDriver;
|
|
|
85
85
|
exports.default = _default;require('source-map-support').install();
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiTk9fUFJPWFkiLCJSZWdFeHAiLCJTYWZhcmlEcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJyZXNldFN0YXRlIiwiY21kIiwiZm4iLCJfIiwidG9QYWlycyIsImNvbW1hbmRzIiwicHJvdG90eXBlIiwic2FmYXJpIiwicHJveHlSZXFSZXMiLCJpc1Byb3h5QWN0aXZlIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwiU2FmYXJpRHJpdmVyU2VydmVyIiwic3RhcnQiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInByb3h5IiwiYmluZCIsImxvZyIsImluZm8iLCJzdG9wIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBRCxFQUFRLElBQUlDLE1BQUosQ0FBVyx3QkFBWCxDQUFSLENBRGUsRUFFZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsd0JBQVgsQ0FBVCxDQUZlLEVBR2YsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLDBDQUFYLENBQVQsQ0FIZSxFQUlmLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyw0QkFBWCxDQUFULENBSmUsQ0FBakI7O0FBT0EsTUFBTUMsWUFBTixTQUEyQkMsNEJBQTNCLENBQXNDO0FBQ3BDQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7QUFDdEIsVUFBTUEsSUFBTjtBQUNBLFNBQUtDLHFCQUFMLEdBQTZCQSxrQ0FBN0I7QUFDQSxTQUFLQyxpQkFBTCxHQUF5QixDQUN2QixPQUR1QixFQUV2QixVQUZ1QixFQUd2QixXQUh1QixFQUl2QixtQkFKdUIsRUFLdkIsY0FMdUIsRUFPdkIsSUFQdUIsRUFRdkIsTUFSdUIsQ0FBekI7QUFVQSxTQUFLQyxVQUFMOztBQUVBLFNBQUssTUFBTSxDQUFDQyxHQUFELEVBQU1DLEVBQU4sQ0FBWCxJQUF3QkMsZ0JBQUVDLE9BQUYsQ0FBVUMsY0FBVixDQUF4QixFQUE2QztBQUMzQ1gsTUFBQUEsWUFBWSxDQUFDWSxTQUFiLENBQXVCTCxHQUF2QixJQUE4QkMsRUFBOUI7QUFDRDtBQUNGOztBQUVERixFQUFBQSxVQUFVLEdBQUk7QUFDWixTQUFLTyxNQUFMLEdBQWMsSUFBZDtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEtBQXJCO0FBQ0Q7O0FBRURDLEVBQUFBLFdBQVcsR0FBSTtBQUNiLFdBQU8sS0FBS0QsYUFBWjtBQUNEOztBQUVERSxFQUFBQSxpQkFBaUIsR0FBSTtBQUNuQixXQUFPbkIsUUFBUDtBQUNEOztBQUVEb0IsRUFBQUEsUUFBUSxHQUFJO0FBQ1YsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsUUFBTUMsYUFBTixDQUFxQixHQUFHQyxJQUF4QixFQUE4QjtBQUM1QixVQUFNLENBQUNDLFNBQUQsRUFBWUMsSUFBWixJQUFvQixNQUFNLE1BQU1ILGFBQU4sQ0FBb0IsR0FBR0MsSUFBdkIsQ0FBaEM7QUFDQSxTQUFLUCxNQUFMLEdBQWMsSUFBSVUsZUFBSixFQUFkOztBQUNBLFFBQUk7QUFDRixZQUFNLEtBQUtWLE1BQUwsQ0FBWVcsS0FBWixDQUFrQixnQ0FBb0JGLElBQXBCLENBQWxCLENBQU47QUFDRCxLQUZELENBRUUsT0FBT0csQ0FBUCxFQUFVO0FBQ1YsWUFBTSxLQUFLQyxhQUFMLEVBQU47QUFDQSxZQUFNRCxDQUFOO0FBQ0Q7O0FBQ0QsU0FBS1gsV0FBTCxHQUFtQixLQUFLRCxNQUFMLENBQVljLEtBQVosQ0FBa0JiLFdBQWxCLENBQThCYyxJQUE5QixDQUFtQyxLQUFLZixNQUFMLENBQVljLEtBQS9DLENBQW5CO0FBQ0EsU0FBS1osYUFBTCxHQUFxQixJQUFyQjtBQUNBLFdBQU8sQ0FBQ00sU0FBRCxFQUFZQyxJQUFaLENBQVA7QUFDRDs7QUFFRCxRQUFNSSxhQUFOLEdBQXVCO0FBQ3JCRyxvQkFBSUMsSUFBSixDQUFTLHVCQUFUOztBQUNBLFVBQU0sS0FBS2pCLE1BQUwsQ0FBWWtCLElBQVosRUFBTjtBQUNBLFNBQUt6QixVQUFMO0FBRUEsVUFBTSxNQUFNb0IsYUFBTixFQUFOO0FBQ0Q7O0FBM0RtQzs7ZUE4RHZCMUIsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IFNhZmFyaURyaXZlclNlcnZlciBmcm9tICcuL3NhZmFyaSc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwQ29uc3RyYWludHMgfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBmb3JtYXRDYXBzRm9yU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2VsZW1lbnRzPyQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50cz8kJyldLFxuXTtcblxuY2xhc3MgU2FmYXJpRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICd0YWcgbmFtZScsXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdwYXJ0aWFsIGxpbmsgdGV4dCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgIC8vIExldCB0aGVzZSB0d28gcmVhY2ggU2FmYXJpIERyaXZlciBhbmQgZmFpbCB0aGVyZSB3aXRoIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2VcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0U3RhdGUoKTtcblxuICAgIGZvciAoY29uc3QgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgICAgIFNhZmFyaURyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0U3RhdGUgKCkge1xuICAgIHRoaXMuc2FmYXJpID0gbnVsbDtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcbiAgICB0aGlzLmlzUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIHJldHVybiBOT19QUk9YWTtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG4gICAgdGhpcy5zYWZhcmkgPSBuZXcgU2FmYXJpRHJpdmVyU2VydmVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc2FmYXJpLnN0YXJ0KGZvcm1hdENhcHNGb3JTZXJ2ZXIoY2FwcykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuc2FmYXJpLnByb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5zYWZhcmkucHJveHkpO1xuICAgIHRoaXMuaXNQcm94eUFjdGl2ZSA9IHRydWU7XG4gICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgbG9nLmluZm8oJ0VuZGluZyBTYWZhcmkgc2Vzc2lvbicpO1xuICAgIGF3YWl0IHRoaXMuc2FmYXJpLnN0b3AoKTtcbiAgICB0aGlzLnJlc2V0U3RhdGUoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTYWZhcmlEcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
package/build/lib/safari.js
CHANGED
|
@@ -172,15 +172,19 @@ class SafariDriverServer {
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
async stop() {
|
|
175
|
+
var _this$proxy;
|
|
176
|
+
|
|
175
177
|
if (!this.isRunning) {
|
|
176
178
|
log.info(`${SD_BINARY} session cannot be stopped, because the server is not running`);
|
|
177
179
|
return;
|
|
178
180
|
}
|
|
179
181
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
182
|
+
if ((_this$proxy = this.proxy) === null || _this$proxy === void 0 ? void 0 : _this$proxy.sessionId) {
|
|
183
|
+
try {
|
|
184
|
+
await this.proxy.command(`/session/${this.proxy.sessionId}`, 'DELETE');
|
|
185
|
+
} catch (e) {
|
|
186
|
+
log.info(`${SD_BINARY} session cannot be deleted. Original error: ${e.message}`);
|
|
187
|
+
}
|
|
184
188
|
}
|
|
185
189
|
}
|
|
186
190
|
|
|
@@ -190,4 +194,4 @@ var _default = SafariDriverServer;
|
|
|
190
194
|
exports.default = _default;require('source-map-support').install();
|
|
191
195
|
|
|
192
196
|
|
|
193
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zYWZhcmkuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiU0RfQklOQVJZIiwiU1RBUlRVUF9USU1FT1VUIiwiU0FGQVJJX1BPUlRfUkFOR0UiLCJTQUZBUklfU0VSVkVSX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiU2FmYXJpUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImRpZFByb2Nlc3NFeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIlNhZmFyaURyaXZlclByb2Nlc3MiLCJjb25zdHJ1Y3RvciIsInBvcnQiLCJwcm9jIiwiaXNSdW5uaW5nIiwiaW5pdCIsInN0YXJ0UG9ydCIsImVuZFBvcnQiLCJlIiwiRXJyb3IiLCJzYWZhcmlCaW4iLCJmcyIsIndoaWNoIiwiU3ViUHJvY2VzcyIsIm9uIiwic3Rkb3V0Iiwic3RkZXJyIiwibGluZSIsImRlYnVnIiwiY29kZSIsInNpZ25hbCIsImluZm8iLCJzdGFydCIsImtpbGwiLCJzdG9wIiwiaWduIiwiU0FGQVJJX0RSSVZFUl9QUk9DRVNTIiwicHJvY2VzcyIsIm9uY2UiLCJwaWQiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJwcm94eSIsImNhcHMiLCJzZXJ2ZXIiLCJiYXNlIiwia2VlcEFsaXZlIiwiY29tbWFuZCIsImVyciIsIm1lc3NhZ2UiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwidGVzdCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInNlc3Npb25JZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlC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LEVBQUUsQ0FBQyxFQUFELENBREE7QUFFWkMsUUFBQUEsV0FBVyxFQUFFWjtBQUZEO0FBRDZCLEtBQXZDLENBQU47QUFNRDs7QUFFRCxRQUFNUixJQUFOLEdBQWM7QUFDWixRQUFJLENBQUMsS0FBS3BCLFNBQVYsRUFBcUI7QUFDbkI1QixNQUFBQSxHQUFHLENBQUM2QyxJQUFKLENBQVUsR0FBRTFDLFNBQVUsK0RBQXRCO0FBQ0E7QUFDRDs7QUFFRCxRQUFJO0FBQ0YsWUFBTSxLQUFLb0QsS0FBTCxDQUFXSyxPQUFYLENBQW9CLFlBQVcsS0FBS0wsS0FBTCxDQUFXYyxTQUFVLEVBQXBELEVBQXVELFFBQXZELENBQU47QUFDRCxLQUZELENBRUUsT0FBT3JDLENBQVAsRUFBVTtBQUNWaEMsTUFBQUEsR0FBRyxDQUFDNkMsSUFBSixDQUFVLEdBQUUxQyxTQUFVLCtDQUE4QzZCLENBQUMsQ0FBQzhCLE9BQVEsRUFBOUU7QUFDRDtBQUNGOztBQXRFc0I7O2VBeUVWUixrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdTYWZhcmlEcml2ZXJTZXJ2ZXInKTtcblxuY29uc3QgU0RfQklOQVJZID0gJ3NhZmFyaWRyaXZlcic7XG5jb25zdCBTVEFSVFVQX1RJTUVPVVQgPSAxMDAwMDsgLy8gc2Vjb25kc1xuY29uc3QgU0FGQVJJX1BPUlRfUkFOR0UgPSBbNTEwMCwgNTIwMF07XG4vLyBUaGlzIGd1YXJkIGlzIG5lZWRlZCB0byBtYWtlIHN1cmVcbi8vIHdlIG5ldmVyIHJ1biBtdWx0aXBsZSBTYWZhcmkgZHJpdmVyIHByb2Nlc3NlcyBmb3IgdGhlIHNhbWUgQXBwaXVtIHByb2Nlc3NcbmNvbnN0IFNBRkFSSV9TRVJWRVJfR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ3NhZmFyaV9zZXJ2ZXJfZ3VhcmQubG9jaycpLFxuICB7dGltZW91dDogNSwgdHJ5UmVjb3Zlcnk6IHRydWV9XG4pO1xuXG5cbmNsYXNzIFNhZmFyaVByb3h5IGV4dGVuZHMgSldQcm94eSB7XG4gIGFzeW5jIHByb3h5Q29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZENvbnRleHRFcnJvcihcbiAgICAgICAgYCcke21ldGhvZH0gJHt1cmx9JyBjYW5ub3QgYmUgcHJveGllZCB0byBTYWZhcmkgRHJpdmVyIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICAndGhlIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcgKHByb2JhYmx5IGNyYXNoZWQpLiBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5wcm94eUNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG59XG5cblxuY2xhc3MgU2FmYXJpRHJpdmVyUHJvY2VzcyB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLnBvcnQgPSBudWxsO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9jPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAoKSB7XG4gICAgYXdhaXQgU0FGQVJJX1NFUlZFUl9HVUFSRChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbc3RhcnRQb3J0LCBlbmRQb3J0XSA9IFNBRkFSSV9QT1JUX1JBTkdFO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wb3J0ID0gYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2Uoc3RhcnRQb3J0LCBlbmRQb3J0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fS4gYCArXG4gICAgICAgICAgYERvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZWApO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2FmYXJpQmluO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2FmYXJpQmluID0gYXdhaXQgZnMud2hpY2goU0RfQklOQVJZKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NEX0JJTkFSWX0gYmluYXJ5IGNhbm5vdCBiZSBmb3VuZCBpbiBQQVRILiBgICtcbiAgICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBwcmVzZW50IG9uIHlvdXIgc3lzdGVtYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2VzcyhzYWZhcmlCaW4sIFsnLXAnLCB0aGlzLnBvcnQsICctLWRpYWdub3NlJ10pO1xuICAgICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgY29uc3QgbGluZSA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAgIGxvZy5kZWJ1ZyhgWyR7U0RfQklOQVJZfV0gJHtsaW5lfWApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIGxvZy5pbmZvKGAke1NEX0JJTkFSWX0gaGFzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgfSk7XG4gICAgICBsb2cuaW5mbyhgU3RhcnRpbmcgJyR7c2FmYXJpQmlufScgb24gcG9ydCAke3RoaXMucG9ydH1gKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydCgwKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwgKCkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR0tJTEwnKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gIH1cbn1cblxuLy8gU2luZ2xlIHNlcnZlciBwcm9jZXNzIHBlciBBcHBpdW0gaW5zdGFuY2VcbmNvbnN0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUyA9IG5ldyBTYWZhcmlEcml2ZXJQcm9jZXNzKCk7XG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGlmIChTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKGBraWxsICR7U0FGQVJJX0RSSVZFUl9QUk9DRVNTLnByb2MucGlkfWApO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxufSk7XG5cbmNsYXNzIFNhZmFyaURyaXZlclNlcnZlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLnByb3h5ID0gbnVsbDtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhIShTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChjYXBzKSB7XG4gICAgYXdhaXQgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmluaXQoKTtcblxuICAgIHRoaXMucHJveHkgPSBuZXcgU2FmYXJpUHJveHkoe1xuICAgICAgc2VydmVyOiAnMTI3LjAuMC4xJyxcbiAgICAgIHBvcnQ6IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5wb3J0LFxuICAgICAgYmFzZTogJycsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCA9IGZhbHNlO1xuICAgIFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5wcm9jLm9uKCdleGl0JywgKCkgPT4ge1xuICAgICAgdGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAodGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIHdhaXRNczogU1RBUlRVUF9USU1FT1VULFxuICAgICAgICBpbnRlcnZhbE1zOiAxMDAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKC9Db25kaXRpb24gdW5tZXQvLnRlc3QoZS5tZXNzYWdlKSkge1xuICAgICAgICBpZiAoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZykge1xuICAgICAgICAgIC8vIGF2b2lkIFwiZnJvemVuXCIgcHJvY2Vzc2VzLFxuICAgICAgICAgIGF3YWl0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5raWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYWZhcmkgRHJpdmVyIHNlcnZlciBpcyBub3QgbGlzdGVuaW5nIHdpdGhpbiAke1NUQVJUVVBfVElNRU9VVH1tcyB0aW1lb3V0LiBgICtcbiAgICAgICAgICBgTWFrZSBzdXJlIGl0IGhhcyBiZWVuIGV4ZWN1dGVkIG1hbnVhbGx5IGF0IGxlYXN0IG9uY2Ugd2l0aCAnLS1lbmFibGUnIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gYCArXG4gICAgICAgICAgYENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIGFsd2F5c01hdGNoOiBjYXBzLFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgbG9nLmluZm8oYCR7U0RfQklOQVJZfSBzZXNzaW9uIGNhbm5vdCBiZSBzdG9wcGVkLCBiZWNhdXNlIHRoZSBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMucHJveHkuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuaW5mbyhgJHtTRF9CSU5BUll9IHNlc3Npb24gY2Fubm90IGJlIHN0b3BwZWQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2FmYXJpRHJpdmVyU2VydmVyO1xuIl0sImZpbGUiOiJsaWIvc2FmYXJpLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
197
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zYWZhcmkuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiU0RfQklOQVJZIiwiU1RBUlRVUF9USU1FT1VUIiwiU0FGQVJJX1BPUlRfUkFOR0UiLCJTQUZBUklfU0VSVkVSX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiU2FmYXJpUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImRpZFByb2Nlc3NFeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIlNhZmFyaURyaXZlclByb2Nlc3MiLCJjb25zdHJ1Y3RvciIsInBvcnQiLCJwcm9jIiwiaXNSdW5uaW5nIiwiaW5pdCIsInN0YXJ0UG9ydCIsImVuZFBvcnQiLCJlIiwiRXJyb3IiLCJzYWZhcmlCaW4iLCJmcyIsIndoaWNoIiwiU3ViUHJvY2VzcyIsIm9uIiwic3Rkb3V0Iiwic3RkZXJyIiwibGluZSIsImRlYnVnIiwiY29kZSIsInNpZ25hbCIsImluZm8iLCJzdGFydCIsImtpbGwiLCJzdG9wIiwiaWduIiwiU0FGQVJJX0RSSVZFUl9QUk9DRVNTIiwicHJvY2VzcyIsIm9uY2UiLCJwaWQiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJwcm94eSIsImNhcHMiLCJzZXJ2ZXIiLCJiYXNlIiwia2VlcEFsaXZlIiwiY29tbWFuZCIsImVyciIsIm1lc3NhZ2UiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwidGVzdCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInNlc3Npb25JZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlC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LEVBQUUsQ0FBQyxFQUFELENBREE7QUFFWkMsUUFBQUEsV0FBVyxFQUFFWjtBQUZEO0FBRDZCLEtBQXZDLENBQU47QUFNRDs7QUFFRCxRQUFNUixJQUFOLEdBQWM7QUFBQTs7QUFDWixRQUFJLENBQUMsS0FBS3BCLFNBQVYsRUFBcUI7QUFDbkI1QixNQUFBQSxHQUFHLENBQUM2QyxJQUFKLENBQVUsR0FBRTFDLFNBQVUsK0RBQXRCO0FBQ0E7QUFDRDs7QUFFRCx1QkFBSSxLQUFLb0QsS0FBVCxnREFBSSxZQUFZYyxTQUFoQixFQUEyQjtBQUN6QixVQUFJO0FBQ0YsY0FBTSxLQUFLZCxLQUFMLENBQVdLLE9BQVgsQ0FBb0IsWUFBVyxLQUFLTCxLQUFMLENBQVdjLFNBQVUsRUFBcEQsRUFBdUQsUUFBdkQsQ0FBTjtBQUNELE9BRkQsQ0FFRSxPQUFPckMsQ0FBUCxFQUFVO0FBQ1ZoQyxRQUFBQSxHQUFHLENBQUM2QyxJQUFKLENBQVUsR0FBRTFDLFNBQVUsK0NBQThDNkIsQ0FBQyxDQUFDOEIsT0FBUSxFQUE5RTtBQUNEO0FBQ0Y7QUFDRjs7QUF4RXNCOztlQTJFVlIsa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBKV1Byb3h5LCBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgZnMsIGxvZ2dlciwgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignU2FmYXJpRHJpdmVyU2VydmVyJyk7XG5cbmNvbnN0IFNEX0JJTkFSWSA9ICdzYWZhcmlkcml2ZXInO1xuY29uc3QgU1RBUlRVUF9USU1FT1VUID0gMTAwMDA7IC8vIHNlY29uZHNcbmNvbnN0IFNBRkFSSV9QT1JUX1JBTkdFID0gWzUxMDAsIDUyMDBdO1xuLy8gVGhpcyBndWFyZCBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlXG4vLyB3ZSBuZXZlciBydW4gbXVsdGlwbGUgU2FmYXJpIGRyaXZlciBwcm9jZXNzZXMgZm9yIHRoZSBzYW1lIEFwcGl1bSBwcm9jZXNzXG5jb25zdCBTQUZBUklfU0VSVkVSX0dVQVJEID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKFxuICBwYXRoLnJlc29sdmUob3MudG1wZGlyKCksICdzYWZhcmlfc2VydmVyX2d1YXJkLmxvY2snKSxcbiAge3RpbWVvdXQ6IDUsIHRyeVJlY292ZXJ5OiB0cnVlfVxuKTtcblxuXG5jbGFzcyBTYWZhcmlQcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoXG4gICAgICAgIGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gU2FmYXJpIERyaXZlciBzZXJ2ZXIgYmVjYXVzZSBgICtcbiAgICAgICAgJ3RoZSBwcm9jZXNzIGlzIG5vdCBydW5uaW5nIChwcm9iYWJseSBjcmFzaGVkKS4gQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5cbmNsYXNzIFNhZmFyaURyaXZlclByb2Nlc3Mge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMucHJvYz8uaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQgKCkge1xuICAgIGF3YWl0IFNBRkFSSV9TRVJWRVJfR1VBUkQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW3N0YXJ0UG9ydCwgZW5kUG9ydF0gPSBTQUZBUklfUE9SVF9SQU5HRTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGZpbmQgYW55IGZyZWUgcG9ydCBpbiByYW5nZSAke3N0YXJ0UG9ydH0uLiR7ZW5kUG9ydH0uIGAgK1xuICAgICAgICAgIGBEb3VibGUgY2hlY2sgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSBsb2NraW5nIHBvcnRzIHdpdGhpbiB0aGlzIHJhbmdlIGFuZCB0ZXJtaW5hdGUgYCArXG4gICAgICAgICAgYHRoZXNlIHdoaWNoIGFyZSBub3QgbmVlZGVkIGFueW1vcmVgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhZmFyaUJpbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNhZmFyaUJpbiA9IGF3YWl0IGZzLndoaWNoKFNEX0JJTkFSWSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTRF9CSU5BUll9IGJpbmFyeSBjYW5ub3QgYmUgZm91bmQgaW4gUEFUSC4gYCArXG4gICAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgcHJlc2VudCBvbiB5b3VyIHN5c3RlbWApO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3Moc2FmYXJpQmluLCBbJy1wJywgdGhpcy5wb3J0LCAnLS1kaWFnbm9zZSddKTtcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBzdGRvdXQgfHwgc3RkZXJyO1xuICAgICAgICBsb2cuZGVidWcoYFske1NEX0JJTkFSWX1dICR7bGluZX1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBsb2cuaW5mbyhgJHtTRF9CSU5BUll9IGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIH0pO1xuICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nICcke3NhZmFyaUJpbn0nIG9uIHBvcnQgJHt0aGlzLnBvcnR9YCk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBraWxsICgpIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIFNpbmdsZSBzZXJ2ZXIgcHJvY2VzcyBwZXIgQXBwaXVtIGluc3RhbmNlXG5jb25zdCBTQUZBUklfRFJJVkVSX1BST0NFU1MgPSBuZXcgU2FmYXJpRHJpdmVyUHJvY2VzcygpO1xucHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICBpZiAoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZykge1xuICAgIHRyeSB7XG4gICAgICBleGVjU3luYyhga2lsbCAke1NBRkFSSV9EUklWRVJfUFJPQ0VTUy5wcm9jLnBpZH1gKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbn0pO1xuXG5jbGFzcyBTYWZhcmlEcml2ZXJTZXJ2ZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5wcm94eSA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2Fwcykge1xuICAgIGF3YWl0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pbml0KCk7XG5cbiAgICB0aGlzLnByb3h5ID0gbmV3IFNhZmFyaVByb3h5KHtcbiAgICAgIHNlcnZlcjogJzEyNy4wLjAuMScsXG4gICAgICBwb3J0OiBTQUZBUklfRFJJVkVSX1BST0NFU1MucG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSBmYWxzZTtcbiAgICBTQUZBUklfRFJJVkVSX1BST0NFU1MucHJvYy5vbignZXhpdCcsICgpID0+IHtcbiAgICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgaWYgKFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pc1J1bm5pbmcpIHtcbiAgICAgICAgICAvLyBhdm9pZCBcImZyb3plblwiIHByb2Nlc3NlcyxcbiAgICAgICAgICBhd2FpdCBTQUZBUklfRFJJVkVSX1BST0NFU1Mua2lsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2FmYXJpIERyaXZlciBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZyB3aXRoaW4gJHtTVEFSVFVQX1RJTUVPVVR9bXMgdGltZW91dC4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBleGVjdXRlZCBtYW51YWxseSBhdCBsZWFzdCBvbmNlIHdpdGggJy0tZW5hYmxlJyBjb21tYW5kIGxpbmUgYXJndW1lbnQuIGAgK1xuICAgICAgICAgIGBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICBhbHdheXNNYXRjaDogY2FwcyxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIGxvZy5pbmZvKGAke1NEX0JJTkFSWX0gc2Vzc2lvbiBjYW5ub3QgYmUgc3RvcHBlZCwgYmVjYXVzZSB0aGUgc2VydmVyIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJveHk/LnNlc3Npb25JZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMucHJveHkuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmluZm8oYCR7U0RfQklOQVJZfSBzZXNzaW9uIGNhbm5vdCBiZSBkZWxldGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhZmFyaURyaXZlclNlcnZlcjtcbiJdLCJmaWxlIjoibGliL3NhZmFyaS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
@@ -12,21 +12,22 @@ var _chaiAsPromised = _interopRequireDefault(require("chai-as-promised"));
|
|
|
12
12
|
|
|
13
13
|
var _chai = _interopRequireDefault(require("chai"));
|
|
14
14
|
|
|
15
|
+
var _utils = require("../utils");
|
|
16
|
+
|
|
15
17
|
_chai.default.should();
|
|
16
18
|
|
|
17
19
|
_chai.default.use(_chaiAsPromised.default);
|
|
18
20
|
|
|
19
|
-
const HOST = '127.0.0.1';
|
|
20
|
-
const PORT = 4567;
|
|
21
21
|
const CAPS = {
|
|
22
22
|
browserName: 'AppiumSafari',
|
|
23
23
|
platformName: 'mac'
|
|
24
24
|
};
|
|
25
25
|
describe('Desktop SafariDriver', function () {
|
|
26
|
+
this.timeout(_utils.MOCHA_TIMEOUT);
|
|
26
27
|
let server;
|
|
27
28
|
let driver;
|
|
28
29
|
before(async function () {
|
|
29
|
-
server = await (0, _.startServer)(PORT, HOST);
|
|
30
|
+
server = await (0, _.startServer)(_utils.PORT, _utils.HOST);
|
|
30
31
|
});
|
|
31
32
|
after(async function () {
|
|
32
33
|
if (server) {
|
|
@@ -35,7 +36,7 @@ describe('Desktop SafariDriver', function () {
|
|
|
35
36
|
}
|
|
36
37
|
});
|
|
37
38
|
beforeEach(async function () {
|
|
38
|
-
driver = _wd.default.promiseChainRemote(HOST, PORT);
|
|
39
|
+
driver = _wd.default.promiseChainRemote(_utils.HOST, _utils.PORT);
|
|
39
40
|
await driver.init(CAPS);
|
|
40
41
|
});
|
|
41
42
|
afterEach(async function () {
|
|
@@ -52,4 +53,4 @@ describe('Desktop SafariDriver', function () {
|
|
|
52
53
|
});require('source-map-support').install();
|
|
53
54
|
|
|
54
55
|
|
|
55
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZnVuY3Rpb25hbC9kZXNrdG9wLWRyaXZlci1lMmUtc3BlY3MuanMiXSwibmFtZXMiOlsiY2hhaSIsInNob3VsZCIsInVzZSIsImNoYWlBc1Byb21pc2VkIiwiQ0FQUyIsImJyb3dzZXJOYW1lIiwicGxhdGZvcm1OYW1lIiwiZGVzY3JpYmUiLCJ0aW1lb3V0IiwiTU9DSEFfVElNRU9VVCIsInNlcnZlciIsImRyaXZlciIsImJlZm9yZSIsIlBPUlQiLCJIT1NUIiwiYWZ0ZXIiLCJjbG9zZSIsImJlZm9yZUVhY2giLCJ3ZCIsInByb21pc2VDaGFpblJlbW90ZSIsImluaXQiLCJhZnRlckVhY2giLCJxdWl0IiwiaXQiLCJnZXQiLCJidXR0b24iLCJlbGVtZW50QnlDc3MiLCJ0ZXh0IiwiZXZlbnR1YWxseSIsImVxbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUFBLGNBQUtDLE1BQUw7O0FBQ0FELGNBQUtFLEdBQUwsQ0FBU0MsdUJBQVQ7O0FBR0EsTUFBTUMsSUFBSSxHQUFHO0FBQ1hDLEVBQUFBLFdBQVcsRUFBRSxjQURGO0FBRVhDLEVBQUFBLFlBQVksRUFBRTtBQUZILENBQWI7QUFLQUMsUUFBUSxDQUFDLHNCQUFELEVBQXlCLFlBQVk7QUFDM0MsT0FBS0MsT0FBTCxDQUFhQyxvQkFBYjtBQUVBLE1BQUlDLE1BQUo7QUFDQSxNQUFJQyxNQUFKO0FBQ0FDLEVBQUFBLE1BQU0sQ0FBQyxrQkFBa0I7QUFDdkJGLElBQUFBLE1BQU0sR0FBRyxNQUFNLG1CQUFZRyxXQUFaLEVBQWtCQyxXQUFsQixDQUFmO0FBQ0QsR0FGSyxDQUFOO0FBR0FDLEVBQUFBLEtBQUssQ0FBQyxrQkFBa0I7QUFDdEIsUUFBSUwsTUFBSixFQUFZO0FBQ1YsWUFBTUEsTUFBTSxDQUFDTSxLQUFQLEVBQU47QUFDQU4sTUFBQUEsTUFBTSxHQUFHLElBQVQ7QUFDRDtBQUNGLEdBTEksQ0FBTDtBQU1BTyxFQUFBQSxVQUFVLENBQUMsa0JBQWtCO0FBQzNCTixJQUFBQSxNQUFNLEdBQUdPLFlBQUdDLGtCQUFILENBQXNCTCxXQUF0QixFQUE0QkQsV0FBNUIsQ0FBVDtBQUNBLFVBQU1GLE1BQU0sQ0FBQ1MsSUFBUCxDQUFZaEIsSUFBWixDQUFOO0FBQ0QsR0FIUyxDQUFWO0FBSUFpQixFQUFBQSxTQUFTLENBQUMsa0JBQWtCO0FBQzFCLFFBQUlWLE1BQUosRUFBWTtBQUNWLFlBQU1BLE1BQU0sQ0FBQ1csSUFBUCxFQUFOO0FBQ0FYLE1BQUFBLE1BQU0sR0FBRyxJQUFUO0FBQ0Q7QUFDRixHQUxRLENBQVQ7QUFPQVksRUFBQUEsRUFBRSxDQUFDLGlDQUFELEVBQW9DLGtCQUFrQjtBQUN0RCxVQUFNWixNQUFNLENBQUNhLEdBQVAsQ0FBVyxvQkFBWCxDQUFOO0FBQ0EsVUFBTUMsTUFBTSxHQUFHLE1BQU1kLE1BQU0sQ0FBQ2UsWUFBUCxDQUFvQixlQUFwQixDQUFyQjtBQUNBLFVBQU1ELE1BQU0sQ0FBQ0UsSUFBUCxHQUFjMUIsTUFBZCxDQUFxQjJCLFVBQXJCLENBQWdDQyxHQUFoQyxDQUFvQyxpQkFBcEMsQ0FBTjtBQUNELEdBSkMsQ0FBRjtBQUtELENBOUJPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgd2QgZnJvbSAnd2QnO1xuaW1wb3J0IHsgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgY2hhaUFzUHJvbWlzZWQgZnJvbSAnY2hhaS1hcy1wcm9taXNlZCc7XG5pbXBvcnQgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7IEhPU1QsIFBPUlQsIE1PQ0hBX1RJTUVPVVQgfSBmcm9tICcuLi91dGlscyc7XG5cbmNoYWkuc2hvdWxkKCk7XG5jaGFpLnVzZShjaGFpQXNQcm9taXNlZCk7XG5cblxuY29uc3QgQ0FQUyA9IHtcbiAgYnJvd3Nlck5hbWU6ICdBcHBpdW1TYWZhcmknLFxuICBwbGF0Zm9ybU5hbWU6ICdtYWMnLFxufTtcblxuZGVzY3JpYmUoJ0Rlc2t0b3AgU2FmYXJpRHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnRpbWVvdXQoTU9DSEFfVElNRU9VVCk7XG5cbiAgbGV0IHNlcnZlcjtcbiAgbGV0IGRyaXZlcjtcbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcihQT1JULCBIT1NUKTtcbiAgfSk7XG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIHNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyID0gd2QucHJvbWlzZUNoYWluUmVtb3RlKEhPU1QsIFBPUlQpO1xuICAgIGF3YWl0IGRyaXZlci5pbml0KENBUFMpO1xuICB9KTtcbiAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZHJpdmVyKSB7XG4gICAgICBhd2FpdCBkcml2ZXIucXVpdCgpO1xuICAgICAgZHJpdmVyID0gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RhcnQgYW5kIHN0b3AgYSBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGRyaXZlci5nZXQoJ2h0dHBzOi8vYXBwaXVtLmlvLycpO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGF3YWl0IGRyaXZlci5lbGVtZW50QnlDc3MoJyNkb3dubG9hZExpbmsnKTtcbiAgICBhd2FpdCBidXR0b24udGV4dCgpLnNob3VsZC5ldmVudHVhbGx5LmVxbCgnRG93bmxvYWQgQXBwaXVtJyk7XG4gIH0pO1xufSk7XG5cblxuIl0sImZpbGUiOiJ0ZXN0L2Z1bmN0aW9uYWwvZGVza3RvcC1kcml2ZXItZTJlLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -12,13 +12,14 @@ var _chaiAsPromised = _interopRequireDefault(require("chai-as-promised"));
|
|
|
12
12
|
|
|
13
13
|
var _chai = _interopRequireDefault(require("chai"));
|
|
14
14
|
|
|
15
|
+
var _nodeSimctl = _interopRequireDefault(require("node-simctl"));
|
|
16
|
+
|
|
17
|
+
var _utils = require("../utils");
|
|
18
|
+
|
|
15
19
|
_chai.default.should();
|
|
16
20
|
|
|
17
21
|
_chai.default.use(_chaiAsPromised.default);
|
|
18
22
|
|
|
19
|
-
const HOST = '127.0.0.1';
|
|
20
|
-
const PORT = 4567;
|
|
21
|
-
const MOCHA_TIMEOUT = 240000;
|
|
22
23
|
const PLATFORM_VERSION = process.env.PLATFORM_VERSION || '14.1';
|
|
23
24
|
const DEVICE_NAME = process.env.DEVICE_NAME || 'iPhone 11 Pro Max';
|
|
24
25
|
const CAPS = {
|
|
@@ -29,15 +30,31 @@ const CAPS = {
|
|
|
29
30
|
'safari:deviceName': DEVICE_NAME
|
|
30
31
|
};
|
|
31
32
|
describe('Mobile SafariDriver', function () {
|
|
32
|
-
this.timeout(MOCHA_TIMEOUT);
|
|
33
|
+
this.timeout(_utils.MOCHA_TIMEOUT);
|
|
33
34
|
let server;
|
|
34
35
|
let driver;
|
|
35
36
|
before(async function () {
|
|
36
|
-
if (process.env.
|
|
37
|
+
if (process.env.CI) {
|
|
37
38
|
return this.skip();
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
const simctl = new _nodeSimctl.default();
|
|
42
|
+
const allDevices = await simctl.getDevices(PLATFORM_VERSION, 'iOS');
|
|
43
|
+
const device = allDevices.find(({
|
|
44
|
+
name
|
|
45
|
+
}) => name === DEVICE_NAME);
|
|
46
|
+
|
|
47
|
+
if (!device) {
|
|
48
|
+
throw new Error(`Cannot find '${DEVICE_NAME}' Simulator (${PLATFORM_VERSION})`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (device.state !== 'Booted') {
|
|
52
|
+
simctl.udid = device.udid;
|
|
53
|
+
await simctl.bootDevice();
|
|
54
|
+
await simctl.startBootMonitor();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
server = await (0, _.startServer)(_utils.PORT, _utils.HOST);
|
|
41
58
|
});
|
|
42
59
|
after(async function () {
|
|
43
60
|
if (server) {
|
|
@@ -46,7 +63,7 @@ describe('Mobile SafariDriver', function () {
|
|
|
46
63
|
}
|
|
47
64
|
});
|
|
48
65
|
beforeEach(async function () {
|
|
49
|
-
driver = _wd.default.promiseChainRemote(HOST, PORT);
|
|
66
|
+
driver = _wd.default.promiseChainRemote(_utils.HOST, _utils.PORT);
|
|
50
67
|
await driver.init(CAPS);
|
|
51
68
|
});
|
|
52
69
|
afterEach(async function () {
|
|
@@ -63,4 +80,4 @@ describe('Mobile SafariDriver', function () {
|
|
|
63
80
|
});require('source-map-support').install();
|
|
64
81
|
|
|
65
82
|
|
|
66
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZnVuY3Rpb25hbC9tb2JpbGUtZHJpdmVyLWUyZS1zcGVjcy5qcyJdLCJuYW1lcyI6WyJjaGFpIiwic2hvdWxkIiwidXNlIiwiY2hhaUFzUHJvbWlzZWQiLCJQTEFURk9STV9WRVJTSU9OIiwicHJvY2VzcyIsImVudiIsIkRFVklDRV9OQU1FIiwiQ0FQUyIsImJyb3dzZXJOYW1lIiwicGxhdGZvcm1OYW1lIiwiZGVzY3JpYmUiLCJ0aW1lb3V0IiwiTU9DSEFfVElNRU9VVCIsInNlcnZlciIsImRyaXZlciIsImJlZm9yZSIsIkNJIiwic2tpcCIsInNpbWN0bCIsIlNpbWN0bCIsImFsbERldmljZXMiLCJnZXREZXZpY2VzIiwiZGV2aWNlIiwiZmluZCIsIm5hbWUiLCJFcnJvciIsInN0YXRlIiwidWRpZCIsImJvb3REZXZpY2UiLCJzdGFydEJvb3RNb25pdG9yIiwiUE9SVCIsIkhPU1QiLCJhZnRlciIsImNsb3NlIiwiYmVmb3JlRWFjaCIsIndkIiwicHJvbWlzZUNoYWluUmVtb3RlIiwiaW5pdCIsImFmdGVyRWFjaCIsInF1aXQiLCJpdCIsImdldCIsImJ1dHRvbiIsImVsZW1lbnRCeUNzcyIsInRleHQiLCJldmVudHVhbGx5IiwiZXFsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQUEsY0FBS0MsTUFBTDs7QUFDQUQsY0FBS0UsR0FBTCxDQUFTQyx1QkFBVDs7QUFFQSxNQUFNQyxnQkFBZ0IsR0FBR0MsT0FBTyxDQUFDQyxHQUFSLENBQVlGLGdCQUFaLElBQWdDLE1BQXpEO0FBQ0EsTUFBTUcsV0FBVyxHQUFHRixPQUFPLENBQUNDLEdBQVIsQ0FBWUMsV0FBWixJQUEyQixtQkFBL0M7QUFDQSxNQUFNQyxJQUFJLEdBQUc7QUFDWEMsRUFBQUEsV0FBVyxFQUFFLGNBREY7QUFFWEMsRUFBQUEsWUFBWSxFQUFFLEtBRkg7QUFHWCx5QkFBdUIsSUFIWjtBQUlYLDRCQUEwQk4sZ0JBSmY7QUFLWCx1QkFBcUJHO0FBTFYsQ0FBYjtBQVFBSSxRQUFRLENBQUMscUJBQUQsRUFBd0IsWUFBWTtBQUMxQyxPQUFLQyxPQUFMLENBQWFDLG9CQUFiO0FBRUEsTUFBSUMsTUFBSjtBQUNBLE1BQUlDLE1BQUo7QUFDQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QixRQUFJWCxPQUFPLENBQUNDLEdBQVIsQ0FBWVcsRUFBaEIsRUFBb0I7QUFJbEIsYUFBTyxLQUFLQyxJQUFMLEVBQVA7QUFDRDs7QUFHRCxVQUFNQyxNQUFNLEdBQUcsSUFBSUMsbUJBQUosRUFBZjtBQUNBLFVBQU1DLFVBQVUsR0FBRyxNQUFNRixNQUFNLENBQUNHLFVBQVAsQ0FBa0JsQixnQkFBbEIsRUFBb0MsS0FBcEMsQ0FBekI7QUFDQSxVQUFNbUIsTUFBTSxHQUFHRixVQUFVLENBQUNHLElBQVgsQ0FBZ0IsQ0FBQztBQUFDQyxNQUFBQTtBQUFELEtBQUQsS0FBWUEsSUFBSSxLQUFLbEIsV0FBckMsQ0FBZjs7QUFDQSxRQUFJLENBQUNnQixNQUFMLEVBQWE7QUFDWCxZQUFNLElBQUlHLEtBQUosQ0FBVyxnQkFBZW5CLFdBQVksZ0JBQWVILGdCQUFpQixHQUF0RSxDQUFOO0FBQ0Q7O0FBQ0QsUUFBSW1CLE1BQU0sQ0FBQ0ksS0FBUCxLQUFpQixRQUFyQixFQUErQjtBQUM3QlIsTUFBQUEsTUFBTSxDQUFDUyxJQUFQLEdBQWNMLE1BQU0sQ0FBQ0ssSUFBckI7QUFDQSxZQUFNVCxNQUFNLENBQUNVLFVBQVAsRUFBTjtBQUNBLFlBQU1WLE1BQU0sQ0FBQ1csZ0JBQVAsRUFBTjtBQUNEOztBQUVEaEIsSUFBQUEsTUFBTSxHQUFHLE1BQU0sbUJBQVlpQixXQUFaLEVBQWtCQyxXQUFsQixDQUFmO0FBQ0QsR0F0QkssQ0FBTjtBQXVCQUMsRUFBQUEsS0FBSyxDQUFDLGtCQUFrQjtBQUN0QixRQUFJbkIsTUFBSixFQUFZO0FBQ1YsWUFBTUEsTUFBTSxDQUFDb0IsS0FBUCxFQUFOO0FBQ0FwQixNQUFBQSxNQUFNLEdBQUcsSUFBVDtBQUNEO0FBQ0YsR0FMSSxDQUFMO0FBTUFxQixFQUFBQSxVQUFVLENBQUMsa0JBQWtCO0FBQzNCcEIsSUFBQUEsTUFBTSxHQUFHcUIsWUFBR0Msa0JBQUgsQ0FBc0JMLFdBQXRCLEVBQTRCRCxXQUE1QixDQUFUO0FBQ0EsVUFBTWhCLE1BQU0sQ0FBQ3VCLElBQVAsQ0FBWTlCLElBQVosQ0FBTjtBQUNELEdBSFMsQ0FBVjtBQUlBK0IsRUFBQUEsU0FBUyxDQUFDLGtCQUFrQjtBQUMxQixRQUFJeEIsTUFBSixFQUFZO0FBQ1YsWUFBTUEsTUFBTSxDQUFDeUIsSUFBUCxFQUFOO0FBQ0F6QixNQUFBQSxNQUFNLEdBQUcsSUFBVDtBQUNEO0FBQ0YsR0FMUSxDQUFUO0FBT0EwQixFQUFBQSxFQUFFLENBQUMsaUNBQUQsRUFBb0Msa0JBQWtCO0FBQ3RELFVBQU0xQixNQUFNLENBQUMyQixHQUFQLENBQVcsb0JBQVgsQ0FBTjtBQUNBLFVBQU1DLE1BQU0sR0FBRyxNQUFNNUIsTUFBTSxDQUFDNkIsWUFBUCxDQUFvQixlQUFwQixDQUFyQjtBQUNBLFVBQU1ELE1BQU0sQ0FBQ0UsSUFBUCxHQUFjNUMsTUFBZCxDQUFxQjZDLFVBQXJCLENBQWdDQyxHQUFoQyxDQUFvQyxpQkFBcEMsQ0FBTjtBQUNELEdBSkMsQ0FBRjtBQUtELENBbERPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgd2QgZnJvbSAnd2QnO1xuaW1wb3J0IHsgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgY2hhaUFzUHJvbWlzZWQgZnJvbSAnY2hhaS1hcy1wcm9taXNlZCc7XG5pbXBvcnQgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCBTaW1jdGwgZnJvbSAnbm9kZS1zaW1jdGwnO1xuaW1wb3J0IHsgSE9TVCwgUE9SVCwgTU9DSEFfVElNRU9VVCB9IGZyb20gJy4uL3V0aWxzJztcblxuY2hhaS5zaG91bGQoKTtcbmNoYWkudXNlKGNoYWlBc1Byb21pc2VkKTtcblxuY29uc3QgUExBVEZPUk1fVkVSU0lPTiA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1ZFUlNJT04gfHwgJzE0LjEnO1xuY29uc3QgREVWSUNFX05BTUUgPSBwcm9jZXNzLmVudi5ERVZJQ0VfTkFNRSB8fCAnaVBob25lIDExIFBybyBNYXgnO1xuY29uc3QgQ0FQUyA9IHtcbiAgYnJvd3Nlck5hbWU6ICdBcHBpdW1TYWZhcmknLFxuICBwbGF0Zm9ybU5hbWU6ICdpb3MnLFxuICAnc2FmYXJpOnVzZVNpbXVsYXRvcic6IHRydWUsXG4gICdzYWZhcmk6cGxhdGZvcm1WZXJzaW9uJzogUExBVEZPUk1fVkVSU0lPTixcbiAgJ3NhZmFyaTpkZXZpY2VOYW1lJzogREVWSUNFX05BTUUsXG59O1xuXG5kZXNjcmliZSgnTW9iaWxlIFNhZmFyaURyaXZlcicsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy50aW1lb3V0KE1PQ0hBX1RJTUVPVVQpO1xuXG4gIGxldCBzZXJ2ZXI7XG4gIGxldCBkcml2ZXI7XG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJKSB7XG4gICAgICAvLyBJbiBBenVyZSBDSSB0aGUgc3R1ZmYgdW5leHBlY3RlZGx5IGZhaWxzIHdpdGhcbiAgICAgIC8vIFwiVGhlIGRldmljZSBpcyBub3QgY29uZmlndXJlZCB0byBhbGxvdyByZW1vdGUgY29udHJvbCB2aWEgV2ViRHJpdmVyLiBUbyBmaXggdGhpcywgdG9nZ2xlICdBbGxvdyBSZW1vdGUgQXV0b21hdGlvbicgaW4gU2FmYXJpJ3Mgc2V0dGluZ3MgKFNldHRpbmdzIEFwcCA+IFNhZmFyaSA+IEFkdmFuY2VkKS5cIlxuICAgICAgLy8gZXJyb3JcbiAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICB9XG5cbiAgICAvLyBQcmVib290IFNpbXVsYXRvciB0byBhdm9pZCB1bmV4cGVjdGVkIHRpbWVvdXRzXG4gICAgY29uc3Qgc2ltY3RsID0gbmV3IFNpbWN0bCgpO1xuICAgIGNvbnN0IGFsbERldmljZXMgPSBhd2FpdCBzaW1jdGwuZ2V0RGV2aWNlcyhQTEFURk9STV9WRVJTSU9OLCAnaU9TJyk7XG4gICAgY29uc3QgZGV2aWNlID0gYWxsRGV2aWNlcy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT09IERFVklDRV9OQU1FKTtcbiAgICBpZiAoIWRldmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAnJHtERVZJQ0VfTkFNRX0nIFNpbXVsYXRvciAoJHtQTEFURk9STV9WRVJTSU9OfSlgKTtcbiAgICB9XG4gICAgaWYgKGRldmljZS5zdGF0ZSAhPT0gJ0Jvb3RlZCcpIHtcbiAgICAgIHNpbWN0bC51ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICBhd2FpdCBzaW1jdGwuYm9vdERldmljZSgpO1xuICAgICAgYXdhaXQgc2ltY3RsLnN0YXJ0Qm9vdE1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcihQT1JULCBIT1NUKTtcbiAgfSk7XG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIHNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyID0gd2QucHJvbWlzZUNoYWluUmVtb3RlKEhPU1QsIFBPUlQpO1xuICAgIGF3YWl0IGRyaXZlci5pbml0KENBUFMpO1xuICB9KTtcbiAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZHJpdmVyKSB7XG4gICAgICBhd2FpdCBkcml2ZXIucXVpdCgpO1xuICAgICAgZHJpdmVyID0gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RhcnQgYW5kIHN0b3AgYSBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGRyaXZlci5nZXQoJ2h0dHBzOi8vYXBwaXVtLmlvLycpO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGF3YWl0IGRyaXZlci5lbGVtZW50QnlDc3MoJyNkb3dubG9hZExpbmsnKTtcbiAgICBhd2FpdCBidXR0b24udGV4dCgpLnNob3VsZC5ldmVudHVhbGx5LmVxbCgnRG93bmxvYWQgQXBwaXVtJyk7XG4gIH0pO1xufSk7XG5cblxuIl0sImZpbGUiOiJ0ZXN0L2Z1bmN0aW9uYWwvbW9iaWxlLWRyaXZlci1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MOCHA_TIMEOUT = exports.PORT = exports.HOST = void 0;
|
|
7
|
+
|
|
8
|
+
require("source-map-support/register");
|
|
9
|
+
|
|
10
|
+
const HOST = '127.0.0.1';
|
|
11
|
+
exports.HOST = HOST;
|
|
12
|
+
const PORT = 4567;
|
|
13
|
+
exports.PORT = PORT;
|
|
14
|
+
const MOCHA_TIMEOUT = 240000;
|
|
15
|
+
exports.MOCHA_TIMEOUT = MOCHA_TIMEOUT;require('source-map-support').install();
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvdXRpbHMuanMiXSwibmFtZXMiOlsiSE9TVCIsIlBPUlQiLCJNT0NIQV9USU1FT1VUIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxNQUFNQSxJQUFJLEdBQUcsV0FBYjs7QUFDQSxNQUFNQyxJQUFJLEdBQUcsSUFBYjs7QUFDQSxNQUFNQyxhQUFhLEdBQUcsTUFBdEIiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBIT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBQT1JUID0gNDU2NztcbmNvbnN0IE1PQ0hBX1RJTUVPVVQgPSAyNDAwMDA7XG5cbmV4cG9ydCB7IEhPU1QsIFBPUlQsIE1PQ0hBX1RJTUVPVVQgfTtcbiJdLCJmaWxlIjoidGVzdC91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
package/lib/driver.js
CHANGED
|
@@ -14,9 +14,8 @@ const NO_PROXY = [
|
|
|
14
14
|
];
|
|
15
15
|
|
|
16
16
|
class SafariDriver extends BaseDriver {
|
|
17
|
-
|
|
18
17
|
constructor (opts = {}) {
|
|
19
|
-
super(opts
|
|
18
|
+
super(opts);
|
|
20
19
|
this.desiredCapConstraints = desiredCapConstraints;
|
|
21
20
|
this.locatorStrategies = [
|
|
22
21
|
'xpath',
|
|
@@ -59,7 +58,7 @@ class SafariDriver extends BaseDriver {
|
|
|
59
58
|
try {
|
|
60
59
|
await this.safari.start(formatCapsForServer(caps));
|
|
61
60
|
} catch (e) {
|
|
62
|
-
await this.
|
|
61
|
+
await this.deleteSession();
|
|
63
62
|
throw e;
|
|
64
63
|
}
|
|
65
64
|
this.proxyReqRes = this.safari.proxy.proxyReqRes.bind(this.safari.proxy);
|
|
@@ -70,8 +69,9 @@ class SafariDriver extends BaseDriver {
|
|
|
70
69
|
async deleteSession () {
|
|
71
70
|
log.info('Ending Safari session');
|
|
72
71
|
await this.safari.stop();
|
|
73
|
-
await super.deleteSession();
|
|
74
72
|
this.resetState();
|
|
73
|
+
|
|
74
|
+
await super.deleteSession();
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
package/lib/safari.js
CHANGED
|
@@ -162,10 +162,12 @@ class SafariDriverServer {
|
|
|
162
162
|
return;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
165
|
+
if (this.proxy?.sessionId) {
|
|
166
|
+
try {
|
|
167
|
+
await this.proxy.command(`/session/${this.proxy.sessionId}`, 'DELETE');
|
|
168
|
+
} catch (e) {
|
|
169
|
+
log.info(`${SD_BINARY} session cannot be deleted. Original error: ${e.message}`);
|
|
170
|
+
}
|
|
169
171
|
}
|
|
170
172
|
}
|
|
171
173
|
}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"appium",
|
|
6
6
|
"safari"
|
|
7
7
|
],
|
|
8
|
-
"version": "2.
|
|
8
|
+
"version": "2.2.0",
|
|
9
9
|
"author": "appium",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"repository": {
|
|
@@ -69,6 +69,7 @@
|
|
|
69
69
|
"eslint-config-appium": "^4.0.1",
|
|
70
70
|
"gulp": "^4.0.0",
|
|
71
71
|
"mocha": "^8.0.1",
|
|
72
|
+
"node-simctl": "^6.4.0",
|
|
72
73
|
"pre-commit": "^1.1.3",
|
|
73
74
|
"sinon": "^9.0.0",
|
|
74
75
|
"wd": "^1.5.0"
|
|
@@ -2,18 +2,20 @@ import wd from 'wd';
|
|
|
2
2
|
import { startServer } from '../..';
|
|
3
3
|
import chaiAsPromised from 'chai-as-promised';
|
|
4
4
|
import chai from 'chai';
|
|
5
|
+
import { HOST, PORT, MOCHA_TIMEOUT } from '../utils';
|
|
5
6
|
|
|
6
7
|
chai.should();
|
|
7
8
|
chai.use(chaiAsPromised);
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
const PORT = 4567;
|
|
10
|
+
|
|
11
11
|
const CAPS = {
|
|
12
12
|
browserName: 'AppiumSafari',
|
|
13
13
|
platformName: 'mac',
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
describe('Desktop SafariDriver', function () {
|
|
17
|
+
this.timeout(MOCHA_TIMEOUT);
|
|
18
|
+
|
|
17
19
|
let server;
|
|
18
20
|
let driver;
|
|
19
21
|
before(async function () {
|
|
@@ -2,13 +2,12 @@ import wd from 'wd';
|
|
|
2
2
|
import { startServer } from '../..';
|
|
3
3
|
import chaiAsPromised from 'chai-as-promised';
|
|
4
4
|
import chai from 'chai';
|
|
5
|
+
import Simctl from 'node-simctl';
|
|
6
|
+
import { HOST, PORT, MOCHA_TIMEOUT } from '../utils';
|
|
5
7
|
|
|
6
8
|
chai.should();
|
|
7
9
|
chai.use(chaiAsPromised);
|
|
8
10
|
|
|
9
|
-
const HOST = '127.0.0.1';
|
|
10
|
-
const PORT = 4567;
|
|
11
|
-
const MOCHA_TIMEOUT = 240000;
|
|
12
11
|
const PLATFORM_VERSION = process.env.PLATFORM_VERSION || '14.1';
|
|
13
12
|
const DEVICE_NAME = process.env.DEVICE_NAME || 'iPhone 11 Pro Max';
|
|
14
13
|
const CAPS = {
|
|
@@ -25,13 +24,26 @@ describe('Mobile SafariDriver', function () {
|
|
|
25
24
|
let server;
|
|
26
25
|
let driver;
|
|
27
26
|
before(async function () {
|
|
28
|
-
if (process.env.
|
|
29
|
-
// In Azure CI the stuff fails with
|
|
27
|
+
if (process.env.CI) {
|
|
28
|
+
// In Azure CI the stuff unexpectedly fails with
|
|
30
29
|
// "The device is not configured to allow remote control via WebDriver. To fix this, toggle 'Allow Remote Automation' in Safari's settings (Settings App > Safari > Advanced)."
|
|
31
30
|
// error
|
|
32
31
|
return this.skip();
|
|
33
32
|
}
|
|
34
33
|
|
|
34
|
+
// Preboot Simulator to avoid unexpected timeouts
|
|
35
|
+
const simctl = new Simctl();
|
|
36
|
+
const allDevices = await simctl.getDevices(PLATFORM_VERSION, 'iOS');
|
|
37
|
+
const device = allDevices.find(({name}) => name === DEVICE_NAME);
|
|
38
|
+
if (!device) {
|
|
39
|
+
throw new Error(`Cannot find '${DEVICE_NAME}' Simulator (${PLATFORM_VERSION})`);
|
|
40
|
+
}
|
|
41
|
+
if (device.state !== 'Booted') {
|
|
42
|
+
simctl.udid = device.udid;
|
|
43
|
+
await simctl.bootDevice();
|
|
44
|
+
await simctl.startBootMonitor();
|
|
45
|
+
}
|
|
46
|
+
|
|
35
47
|
server = await startServer(PORT, HOST);
|
|
36
48
|
});
|
|
37
49
|
after(async function () {
|