@appium/fake-driver 5.2.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/LICENSE +1 -1
  2. package/build/lib/commands/alert.d.ts +12 -40
  3. package/build/lib/commands/alert.d.ts.map +1 -1
  4. package/build/lib/commands/alert.js +3 -23
  5. package/build/lib/commands/alert.js.map +1 -1
  6. package/build/lib/commands/contexts.d.ts +12 -42
  7. package/build/lib/commands/contexts.d.ts.map +1 -1
  8. package/build/lib/commands/contexts.js +8 -28
  9. package/build/lib/commands/contexts.js.map +1 -1
  10. package/build/lib/commands/element.d.ts +25 -74
  11. package/build/lib/commands/element.d.ts.map +1 -1
  12. package/build/lib/commands/element.js +24 -76
  13. package/build/lib/commands/element.js.map +1 -1
  14. package/build/lib/commands/find.d.ts +16 -44
  15. package/build/lib/commands/find.d.ts.map +1 -1
  16. package/build/lib/commands/find.js +21 -45
  17. package/build/lib/commands/find.js.map +1 -1
  18. package/build/lib/commands/general.d.ts +25 -88
  19. package/build/lib/commands/general.d.ts.map +1 -1
  20. package/build/lib/commands/general.js +3 -61
  21. package/build/lib/commands/general.js.map +1 -1
  22. package/build/lib/commands/index.d.ts +13 -5
  23. package/build/lib/commands/index.d.ts.map +1 -1
  24. package/build/lib/commands/index.js +26 -13
  25. package/build/lib/commands/index.js.map +1 -1
  26. package/build/lib/commands/mixin.d.ts +11 -0
  27. package/build/lib/commands/mixin.d.ts.map +1 -0
  28. package/build/lib/commands/mixin.js +17 -0
  29. package/build/lib/commands/mixin.js.map +1 -0
  30. package/build/lib/driver.d.ts +37 -92
  31. package/build/lib/driver.d.ts.map +1 -1
  32. package/build/lib/driver.js +26 -73
  33. package/build/lib/driver.js.map +1 -1
  34. package/build/lib/fake-app.d.ts +9 -7
  35. package/build/lib/fake-app.d.ts.map +1 -1
  36. package/build/lib/fake-app.js +2 -0
  37. package/build/lib/fake-app.js.map +1 -1
  38. package/build/lib/fake-element.d.ts +12 -4
  39. package/build/lib/fake-element.d.ts.map +1 -1
  40. package/build/lib/fake-element.js +11 -4
  41. package/build/lib/fake-element.js.map +1 -1
  42. package/build/lib/scripts/fake-error.d.ts +1 -0
  43. package/build/lib/scripts/fake-error.js +11 -1
  44. package/build/lib/scripts/fake-error.js.map +1 -1
  45. package/build/lib/scripts/fake-stdin.d.ts +2 -0
  46. package/build/lib/scripts/fake-stdin.d.ts.map +1 -0
  47. package/build/lib/scripts/fake-stdin.js +13 -0
  48. package/build/lib/scripts/fake-stdin.js.map +1 -0
  49. package/lib/commands/alert.ts +70 -0
  50. package/lib/commands/{contexts.js → contexts.ts} +26 -34
  51. package/lib/commands/element.ts +138 -0
  52. package/lib/commands/find.ts +137 -0
  53. package/lib/commands/general.ts +115 -0
  54. package/lib/commands/{index.js → index.ts} +14 -5
  55. package/lib/commands/mixin.ts +13 -0
  56. package/lib/driver.js +42 -78
  57. package/lib/fake-app.js +3 -3
  58. package/lib/fake-element.js +21 -6
  59. package/lib/scripts/fake-error.js +8 -1
  60. package/lib/scripts/fake-stdin.js +9 -0
  61. package/package.json +4 -3
  62. package/lib/commands/alert.js +0 -73
  63. package/lib/commands/element.js +0 -161
  64. package/lib/commands/find.js +0 -118
  65. package/lib/commands/general.js +0 -147
package/lib/driver.js CHANGED
@@ -2,7 +2,6 @@ import B from 'bluebird';
2
2
  import {BaseDriver, errors} from 'appium/driver';
3
3
  import {deprecatedCommandsLogged} from '@appium/base-driver/build/lib/protocol/protocol';
4
4
  import {FakeApp} from './fake-app';
5
- import {alert, contexts, element, find, general} from './commands';
6
5
 
7
6
  const FAKE_DRIVER_CONSTRAINTS = /** @type {const} */ ({
8
7
  app: {
@@ -15,22 +14,50 @@ const FAKE_DRIVER_CONSTRAINTS = /** @type {const} */ ({
15
14
  });
16
15
 
17
16
  /**
17
+ * Constraints for {@linkcode FakeDriver}'s capabilites
18
18
  * @typedef {typeof FAKE_DRIVER_CONSTRAINTS} FakeDriverConstraints
19
19
  */
20
20
 
21
21
  /**
22
+ * @template [Thing=any]
22
23
  * @extends {BaseDriver<FakeDriverConstraints>}
23
24
  * @implements {ExternalDriver<FakeDriverConstraints>}
24
25
  */
25
26
  export class FakeDriver extends BaseDriver {
26
- desiredCapConstraints = FAKE_DRIVER_CONSTRAINTS;
27
+ /**
28
+ * @type {FakeDriverConstraints}
29
+ * @readonly
30
+ */
31
+ desiredCapConstraints;
27
32
 
28
33
  /** @type {string} */
29
34
  curContext;
30
35
 
31
- appModel = new FakeApp();
36
+ /** @type {FakeApp} */
37
+ appModel;
38
+
39
+ /** @type {boolean} */
40
+ _proxyActive;
41
+
42
+ /** @type {boolean} */
43
+ shook;
44
+
45
+ /** @type {string?} */
46
+ focusedElId;
47
+
48
+ /** @type {Thing?} */
49
+ fakeThing;
50
+
51
+ /** @type {number} */
52
+ maxElId;
32
53
 
33
- constructor(opts = {}, shouldValidateCaps = true) {
54
+ /** @type {Record<string,import('./fake-element').FakeElement>} */
55
+ elMap;
56
+
57
+ constructor(
58
+ opts = /** @type {import('@appium/types').DriverOpts<FakeDriverConstraints>} */ ({}),
59
+ shouldValidateCaps = true
60
+ ) {
34
61
  super(opts, shouldValidateCaps);
35
62
  this.curContext = 'NATIVE_APP';
36
63
  this.elMap = {};
@@ -39,6 +66,8 @@ export class FakeDriver extends BaseDriver {
39
66
  this.fakeThing = null;
40
67
  this._proxyActive = false;
41
68
  this.shook = false;
69
+ this.appModel = new FakeApp();
70
+ this.desiredCapConstraints = FAKE_DRIVER_CONSTRAINTS;
42
71
  }
43
72
 
44
73
  proxyActive() {
@@ -112,7 +141,7 @@ export class FakeDriver extends BaseDriver {
112
141
  /**
113
142
  * Set the 'thing' value (so that it can be retrieved later)
114
143
  *
115
- * @param {any} thing
144
+ * @param {Thing} thing
116
145
  * @returns {Promise<null>}
117
146
  */
118
147
  async setFakeThing(thing) {
@@ -201,86 +230,17 @@ export class FakeDriver extends BaseDriver {
201
230
  res.send(JSON.stringify(cliArgs));
202
231
  });
203
232
  }
204
-
205
- /*********
206
- * ALERT *
207
- *********/
208
- assertNoAlert = alert.assertNoAlert;
209
- assertAlert = alert.assertAlert;
210
- getAlertText = alert.getAlertText;
211
- setAlertText = alert.setAlertText;
212
- postAcceptAlert = alert.postAcceptAlert;
213
- postDismissAlert = alert.postDismissAlert;
214
-
215
- /************
216
- * CONTEXTS *
217
- ************/
218
- getRawContexts = contexts.getRawContexts;
219
- assertWebviewContext = contexts.assertWebviewContext;
220
- getCurrentContext = contexts.getCurrentContext;
221
- getContexts = contexts.getContexts;
222
- setContext = contexts.setContext;
223
- setFrame = contexts.setFrame;
224
-
225
- /************
226
- * ELEMENTS *
227
- ************/
228
- getElements = element.getElements;
229
- getElement = element.getElement;
230
- getName = element.getName;
231
- elementDisplayed = element.elementDisplayed;
232
- elementEnabled = element.elementEnabled;
233
- elementSelected = element.elementSelected;
234
- setValue = element.setValue;
235
- getText = element.getText;
236
- clear = element.clear;
237
- click = element.click;
238
- getAttribute = element.getAttribute;
239
- getElementRect = element.getElementRect;
240
- getSize = element.getSize;
241
- equalsElement = element.equalsElement;
242
- getCssProperty = element.getCssProperty;
243
- getLocation = element.getLocation;
244
- getLocationInView = element.getLocationInView;
245
-
246
- /********
247
- * FIND *
248
- ********/
249
- getExistingElementForNode = find.getExistingElementForNode;
250
- wrapNewEl = find.wrapNewEl;
251
- findElOrEls = find.findElOrEls;
252
- findElement = find.findElement;
253
- findElements = find.findElements;
254
- findElementFromElement = find.findElementFromElement;
255
- findElementsFromElement = find.findElementsFromElement;
256
-
257
- /***********
258
- * GENERAL *
259
- ***********/
260
- title = general.title;
261
- keys = general.keys;
262
- setGeoLocation = general.setGeoLocation;
263
- getGeoLocation = general.getGeoLocation;
264
- getPageSource = general.getPageSource;
265
- getOrientation = general.getOrientation;
266
- setOrientation = general.setOrientation;
267
- getScreenshot = general.getScreenshot;
268
- getWindowSize = general.getWindowSize;
269
- getWindowRect = general.getWindowRect;
270
- performActions = general.performActions;
271
- getLog = general.getLog;
272
- mobileShake = general.mobileShake;
273
- doubleClick = general.doubleClick;
274
- execute = general.execute;
275
- fakeAddition = general.fakeAddition;
276
- releaseActions = general.releaseActions;
277
233
  }
278
234
 
235
+ // eslint-disable-next-line import/no-unresolved
236
+ export * from './commands';
237
+
279
238
  export default FakeDriver;
280
239
 
281
240
  /**
282
241
  * @typedef {import('./types').FakeDriverCaps} FakeDriverCaps
283
242
  * @typedef {import('./types').W3CFakeDriverCaps} W3CFakeDriverCaps
243
+ * @typedef {import('@appium/types').Element} Element
284
244
  */
285
245
 
286
246
  /**
@@ -292,3 +252,7 @@ export default FakeDriver;
292
252
  * @template {import('@appium/types').Constraints} C
293
253
  * @typedef {import('@appium/types').ExternalDriver<C>} ExternalDriver
294
254
  */
255
+
256
+ /**
257
+ * @typedef {import('@appium/types').Orientation} Orientation
258
+ */
package/lib/fake-app.js CHANGED
@@ -8,7 +8,7 @@ import {FakeElement} from './fake-element';
8
8
 
9
9
  const SCREENSHOT = path.join(__dirname, 'screen.png');
10
10
 
11
- class FakeApp {
11
+ export class FakeApp {
12
12
  constructor() {
13
13
  this.dom = null;
14
14
  this.activeDom = null;
@@ -20,7 +20,9 @@ class FakeApp {
20
20
  this._width = null;
21
21
  this._height = null;
22
22
  this.rawXml = '';
23
+ /** @type {import('./driver').Orientation} */
23
24
  this.currentOrientation = 'PORTRAIT';
25
+ /** @type {import('@appium/types').ActionSequence[][]} */
24
26
  this.actionLog = [];
25
27
  }
26
28
 
@@ -176,8 +178,6 @@ class FakeWebView {
176
178
  }
177
179
  }
178
180
 
179
- export {FakeApp};
180
-
181
181
  /**
182
182
  * @typedef {Element & {data: any}} ElementWithData
183
183
  */
@@ -1,7 +1,20 @@
1
1
  import _ from 'lodash';
2
2
  import XMLDom from '@xmldom/xmldom';
3
3
 
4
- class FakeElement {
4
+ export class FakeElement {
5
+ /** @type {FakeApp} */
6
+ app;
7
+
8
+ /** @type {string} */
9
+ type;
10
+
11
+ /** @type {Record<string,string>} */
12
+ nodeAttrs;
13
+
14
+ /**
15
+ * @param {any} xmlNode
16
+ * @param {FakeApp} app
17
+ */
5
18
  constructor(xmlNode, app) {
6
19
  this.app = app;
7
20
  this.node = xmlNode;
@@ -53,8 +66,8 @@ class FakeElement {
53
66
 
54
67
  getLocation() {
55
68
  return {
56
- x: parseFloat(this.nodeAttrs.left || 0),
57
- y: parseFloat(this.nodeAttrs.top || 0),
69
+ x: parseFloat(this.nodeAttrs.left || '0'),
70
+ y: parseFloat(this.nodeAttrs.top || '0'),
58
71
  };
59
72
  }
60
73
 
@@ -64,8 +77,8 @@ class FakeElement {
64
77
 
65
78
  getSize() {
66
79
  return {
67
- width: parseFloat(this.nodeAttrs.width || 0),
68
- height: parseFloat(this.nodeAttrs.height || 0),
80
+ width: parseFloat(this.nodeAttrs.width || '0'),
81
+ height: parseFloat(this.nodeAttrs.height || '0'),
69
82
  };
70
83
  }
71
84
 
@@ -99,4 +112,6 @@ class FakeElement {
99
112
  }
100
113
  }
101
114
 
102
- export {FakeElement};
115
+ /**
116
+ * @typedef {import('./fake-app').FakeApp} FakeApp
117
+ */
@@ -1 +1,8 @@
1
- throw Error('Unsuccessfully ran the script');
1
+ import ora from 'ora';
2
+
3
+ const spinner = ora('Running fake-error...').start();
4
+
5
+ setTimeout(() => {
6
+ spinner.fail('Oh nooooooo!');
7
+ throw Error('Unsuccessfully ran the script');
8
+ }, 1000);
@@ -0,0 +1,9 @@
1
+ import readline from 'node:readline';
2
+
3
+ const rl = readline.createInterface({input: process.stdin, output: process.stderr});
4
+
5
+ rl.question('Press ENTER to continue: ', () => {
6
+ rl.close();
7
+ // eslint-disable-next-line no-console
8
+ console.error('You did it!');
9
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appium/fake-driver",
3
- "version": "5.2.0",
3
+ "version": "5.2.1",
4
4
  "description": "Mock driver used internally by Appium for testing. Ignore",
5
5
  "keywords": [
6
6
  "automation",
@@ -75,12 +75,13 @@
75
75
  "schema": "./build/lib/fake-driver-schema.js",
76
76
  "scripts": {
77
77
  "fake-error": "./build/lib/scripts/fake-error.js",
78
- "fake-success": "./build/lib/scripts/fake-success.js"
78
+ "fake-success": "./build/lib/scripts/fake-success.js",
79
+ "fake-stdin": "./build/lib/scripts/fake-stdin.js"
79
80
  }
80
81
  },
81
82
  "typedoc": {
82
83
  "entryPoint": "./lib/index.js"
83
84
  },
84
85
  "types": "./build/lib/index.d.ts",
85
- "gitHead": "7b4935632222123a4fa7422461f6312f1f0dfbe4"
86
+ "gitHead": "872b924a97c13142bdb8bf4218a4db324f309ce4"
86
87
  }
@@ -1,73 +0,0 @@
1
- import {errors} from 'appium/driver';
2
-
3
- export default {
4
- /**
5
- * @this {FakeDriver}
6
- */
7
- assertNoAlert() {
8
- if (this.appModel.hasAlert()) {
9
- throw new errors.UnexpectedAlertOpenError();
10
- }
11
- },
12
-
13
- /**
14
- * @this {FakeDriver}
15
- */
16
- assertAlert() {
17
- if (!this.appModel.hasAlert()) {
18
- throw new errors.NoAlertOpenError();
19
- }
20
- },
21
-
22
- /**
23
- * Get the text of an alert
24
- *
25
- * @returns {Promise<string>}
26
- * @this {FakeDriver}
27
- */
28
- async getAlertText() {
29
- this.assertAlert();
30
- return this.appModel.alertText();
31
- },
32
-
33
- /**
34
- * Set the text of an alert
35
- *
36
- * @param {string} text
37
- * @returns {Promise<void>}
38
- * @this {FakeDriver}
39
- */
40
- async setAlertText(text) {
41
- this.assertAlert();
42
- try {
43
- this.appModel.setAlertText(text);
44
- } catch (e) {
45
- throw new errors.InvalidElementStateError();
46
- }
47
- },
48
-
49
- /**
50
- * Accept an alert
51
- *
52
- * @returns {Promise<void>}
53
- * @this {FakeDriver}
54
- */
55
- async postAcceptAlert() {
56
- this.assertAlert();
57
- this.appModel.handleAlert();
58
- },
59
-
60
- /**
61
- * Dismiss an alert
62
- *
63
- * @returns {Promise<void>}
64
- * @this {FakeDriver}
65
- */
66
- async postDismissAlert() {
67
- return this.postAcceptAlert();
68
- },
69
- };
70
-
71
- /**
72
- * @typedef {import('../driver').FakeDriver} FakeDriver
73
- */
@@ -1,161 +0,0 @@
1
- import _ from 'lodash';
2
- import {errors} from 'appium/driver';
3
- export default {
4
- /**
5
- * @this {FakeDriver}
6
- */
7
- getElements(elIds) {
8
- for (let elId of elIds) {
9
- if (!_.has(this.elMap, elId)) {
10
- throw new errors.StaleElementReferenceError();
11
- }
12
- }
13
- return elIds.map((e) => this.elMap[e]);
14
- },
15
-
16
- /**
17
- * @this {FakeDriver}
18
- */
19
- getElement(elId) {
20
- return this.getElements([elId])[0];
21
- },
22
-
23
- /**
24
- * @this {FakeDriver}
25
- */
26
- async getName(elementId) {
27
- let el = this.getElement(elementId);
28
- return el.tagName;
29
- },
30
-
31
- /**
32
- * @this {FakeDriver}
33
- */
34
- async elementDisplayed(elementId) {
35
- let el = this.getElement(elementId);
36
- return el.isVisible();
37
- },
38
-
39
- /**
40
- * @this {FakeDriver}
41
- */
42
- async elementEnabled(elementId) {
43
- let el = this.getElement(elementId);
44
- return el.isEnabled();
45
- },
46
-
47
- /**
48
- * @this {FakeDriver}
49
- */
50
- async elementSelected(elementId) {
51
- let el = this.getElement(elementId);
52
- return el.isSelected();
53
- },
54
-
55
- /**
56
- * @this {FakeDriver}
57
- */
58
- async setValue(keys, elementId) {
59
- let value = keys;
60
- if (keys instanceof Array) {
61
- value = keys.join('');
62
- }
63
- let el = this.getElement(elementId);
64
- if (el.type !== 'MockInputField') {
65
- throw new errors.InvalidElementStateError();
66
- }
67
- el.setAttr('value', value);
68
- },
69
-
70
- /**
71
- * @this {FakeDriver}
72
- */
73
- async getText(elementId) {
74
- let el = this.getElement(elementId);
75
- return el.getAttr('value');
76
- },
77
-
78
- /**
79
- * @this {FakeDriver}
80
- */
81
- async clear(elementId) {
82
- await this.setValue('', elementId);
83
- },
84
-
85
- /**
86
- * This comment should be displayed instead of the one from ExternalDriver
87
- * @param {string} elementId
88
- * @this {FakeDriver}
89
- */
90
- async click(elementId) {
91
- this.assertNoAlert();
92
- let el = this.getElement(elementId);
93
- if (!el.isVisible()) {
94
- throw new errors.InvalidElementStateError();
95
- }
96
- el.click();
97
- this.focusedElId = elementId;
98
- },
99
-
100
- /**
101
- * @this {FakeDriver}
102
- */
103
- async getAttribute(attr, elementId) {
104
- let el = this.getElement(elementId);
105
- return el.getAttr(attr);
106
- },
107
-
108
- /**
109
- * @this {FakeDriver}
110
- */
111
- getElementRect(elementId) {
112
- let el = this.getElement(elementId);
113
- return el.getElementRect();
114
- },
115
-
116
- /**
117
- * @this {FakeDriver}
118
- */
119
- getSize(elementId) {
120
- let el = this.getElement(elementId);
121
- return el.getSize();
122
- },
123
-
124
- /**
125
- * @this {FakeDriver}
126
- */
127
- equalsElement(el1Id, el2Id) {
128
- let el1 = this.getElement(el1Id);
129
- let el2 = this.getElement(el2Id);
130
- return el1.equals(el2);
131
- },
132
-
133
- /**
134
- * @this {FakeDriver}
135
- */
136
- async getCssProperty(prop, elementId) {
137
- this.assertWebviewContext();
138
- let el = this.getElement(elementId);
139
- return el.getCss(prop);
140
- },
141
-
142
- /**
143
- * @param {string} elementId
144
- * @this {FakeDriver}
145
- */
146
- async getLocation(elementId) {
147
- const el = this.getElement(elementId);
148
- return el.getLocation();
149
- },
150
-
151
- /**
152
- * @this {FakeDriver}
153
- */
154
- async getLocationInView(elementId) {
155
- return this.getLocation(elementId);
156
- },
157
- };
158
-
159
- /**
160
- * @typedef {import('../driver').FakeDriver} FakeDriver
161
- */
@@ -1,118 +0,0 @@
1
- import _ from 'lodash';
2
- import {errors} from 'appium/driver';
3
- import {FakeElement} from '../fake-element';
4
-
5
- export default {
6
- /**
7
- * @this {FakeDriver}
8
- */
9
- getExistingElementForNode(node) {
10
- for (let [id, el] of _.toPairs(this.elMap)) {
11
- if (el.node === node) {
12
- return id;
13
- }
14
- }
15
- return null;
16
- },
17
-
18
- /**
19
- * @this {FakeDriver}
20
- */
21
- wrapNewEl(obj) {
22
- // first check and see if we already have a ref to this element
23
- let existingElId = this.getExistingElementForNode(obj);
24
- if (existingElId) {
25
- return {ELEMENT: existingElId};
26
- }
27
-
28
- // otherwise add the element to the map
29
- this.maxElId++;
30
- this.elMap[this.maxElId.toString()] = new FakeElement(obj, this.appModel);
31
- return {ELEMENT: this.maxElId.toString()};
32
- },
33
-
34
- /**
35
- * @template {boolean} Mult
36
- * @template [Ctx=any]
37
- * @param {string} strategy
38
- * @param {string} selector
39
- * @param {Mult} mult
40
- * @param {Ctx} [context]
41
- * @returns {Promise<Mult extends true ? Element[] : Element>}
42
- * @this {FakeDriver}
43
- */
44
- async findElOrEls(strategy, selector, mult, context) {
45
- let qMap = {
46
- xpath: 'xpathQuery',
47
- id: 'idQuery',
48
- 'accessibility id': 'idQuery',
49
- 'class name': 'classQuery',
50
- 'tag name': 'classQuery',
51
- 'css selector': 'cssQuery',
52
- };
53
- // TODO this error checking should probably be part of MJSONWP?
54
- if (!_.includes(_.keys(qMap), strategy)) {
55
- throw new errors.UnknownCommandError();
56
- }
57
- if (selector === 'badsel') {
58
- throw new errors.InvalidSelectorError();
59
- }
60
- let els = this.appModel[qMap[strategy]](selector, context);
61
-
62
- let retval;
63
- if (els.length) {
64
- if (mult) {
65
- let allEls = [];
66
- for (let el of els) {
67
- allEls.push(this.wrapNewEl(el));
68
- }
69
- retval = allEls;
70
- } else {
71
- retval = this.wrapNewEl(els[0]);
72
- }
73
- } else if (mult) {
74
- retval = [];
75
- } else {
76
- throw new errors.NoSuchElementError();
77
- }
78
- return /** @type {Mult extends true ? Element[] : Element} */ (retval);
79
- },
80
-
81
- /**
82
- * This should override whatever's in ExternalDriver
83
- * @param {string} strategy Strategy
84
- * @param {string} selector Selector
85
- * @this {FakeDriver}
86
- */
87
- async findElement(strategy, selector) {
88
- return this.findElOrEls(strategy, selector, false);
89
- },
90
-
91
- /**
92
- * @this {FakeDriver}
93
- */
94
- async findElements(strategy, selector) {
95
- return this.findElOrEls(strategy, selector, true);
96
- },
97
-
98
- /**
99
- * @this {FakeDriver}
100
- */
101
- async findElementFromElement(strategy, selector, elementId) {
102
- let el = this.getElement(elementId);
103
- return this.findElOrEls(strategy, selector, false, el.xmlFragment);
104
- },
105
-
106
- /**
107
- * @this {FakeDriver}
108
- */
109
- async findElementsFromElement(strategy, selector, elementId) {
110
- let el = this.getElement(elementId);
111
- return this.findElOrEls(strategy, selector, true, el.xmlFragment);
112
- },
113
- };
114
-
115
- /**
116
- * @typedef {import('@appium/types').Element} Element
117
- * @typedef {import('../driver').FakeDriver} FakeDriver
118
- */