@applitools/spec-driver-selenium 1.3.1 → 1.3.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/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  ## Unreleased
4
4
 
5
5
 
6
+ ## 1.3.2 - 2022/1/12
7
+
8
+ - no changes
9
+
6
10
  ## 1.3.1 - 2022/1/12
7
11
 
8
12
  - use chromedriver instead of selenium docker container for testing
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const spec = __importStar(require("./spec-driver"));
26
+ if (!process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION) {
27
+ try {
28
+ const { version } = require('selenium-webdriver/package.json');
29
+ const [major] = version.split('.', 1);
30
+ process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION = major;
31
+ }
32
+ catch (_a) {
33
+ // NOTE: ignore error
34
+ }
35
+ }
36
+ __exportStar(require("./spec-driver"), exports);
37
+ exports.default = spec;
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __rest = (this && this.__rest) || function (s, e) {
22
+ var t = {};
23
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
24
+ t[p] = s[p];
25
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
26
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
27
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
28
+ t[p[i]] = s[p[i]];
29
+ }
30
+ return t;
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.build = exports.performAction = exports.getElementText = exports.getElementAttribute = exports.getElementRegion = exports.getOrientation = exports.getBarsHeight = exports.waitUntilDisplayed = exports.scrollIntoView = exports.type = exports.hover = exports.click = exports.takeScreenshot = exports.visit = exports.getUrl = exports.getTitle = exports.getCapabilities = exports.getDriverInfo = exports.getCookies = exports.setWindowSize = exports.getWindowSize = exports.findElements = exports.findElement = exports.childContext = exports.parentContext = exports.mainContext = exports.executeScript = exports.isEqualElements = exports.isStaleElementError = exports.transformSelector = exports.transformDriver = exports.isSelector = exports.isElement = exports.isDriver = void 0;
34
+ const Selenium = __importStar(require("selenium-webdriver"));
35
+ const utils = __importStar(require("@applitools/utils"));
36
+ // #region HELPERS
37
+ const byHash = ['className', 'css', 'id', 'js', 'linkText', 'name', 'partialLinkText', 'tagName', 'xpath'];
38
+ function extractElementId(element) {
39
+ return isElement(element) ? element.getId() : element['shadow-6066-11e4-a52e-4f735466cecf'];
40
+ }
41
+ function transformShadowRoot(driver, shadowRoot) {
42
+ return isElement(shadowRoot)
43
+ ? shadowRoot
44
+ : new Selenium.WebElement(driver, shadowRoot['shadow-6066-11e4-a52e-4f735466cecf']);
45
+ }
46
+ // #endregion
47
+ // #region UTILITY
48
+ function isDriver(driver) {
49
+ return utils.types.instanceOf(driver, 'WebDriver');
50
+ }
51
+ exports.isDriver = isDriver;
52
+ function isElement(element) {
53
+ return utils.types.instanceOf(element, 'WebElement');
54
+ }
55
+ exports.isElement = isElement;
56
+ function isSelector(selector) {
57
+ if (!selector)
58
+ return false;
59
+ return utils.types.has(selector, ['using', 'value']) || byHash.includes(Object.keys(selector)[0]);
60
+ }
61
+ exports.isSelector = isSelector;
62
+ function transformDriver(driver) {
63
+ driver.getExecutor().defineCommand('getSessionDetails', 'GET', '/session/:sessionId');
64
+ driver.getExecutor().defineCommand('getOrientation', 'GET', '/session/:sessionId/orientation');
65
+ driver.getExecutor().defineCommand('getSystemBars', 'GET', '/session/:sessionId/appium/device/system_bars');
66
+ driver.getExecutor().defineCommand('getWindowSize', 'GET', '/session/:sessionId/window/current/size');
67
+ driver.getExecutor().defineCommand('setWindowSize', 'POST', '/session/:sessionId/window/current/size');
68
+ driver.getExecutor().defineCommand('setWindowPosition', 'POST', '/session/:sessionId/window/current/position');
69
+ driver.getExecutor().defineCommand('performTouch', 'POST', '/session/:sessionId/touch/perform');
70
+ driver.getExecutor().defineCommand('executeCdp', 'POST', '/session/:sessionId/chromium/send_command_and_get_result');
71
+ if (process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3') {
72
+ driver.getExecutor().defineCommand('switchToParentFrame', 'POST', '/session/:sessionId/frame/parent');
73
+ }
74
+ return driver;
75
+ }
76
+ exports.transformDriver = transformDriver;
77
+ function transformSelector(selector) {
78
+ if (utils.types.isString(selector)) {
79
+ return { css: selector };
80
+ }
81
+ else if (utils.types.has(selector, 'selector')) {
82
+ if (!utils.types.isString(selector.selector))
83
+ return selector.selector;
84
+ if (!utils.types.has(selector, 'type'))
85
+ return { css: selector.selector };
86
+ if (selector.type === 'css')
87
+ return { css: selector.selector };
88
+ else
89
+ return { using: selector.type, value: selector.selector };
90
+ }
91
+ return selector;
92
+ }
93
+ exports.transformSelector = transformSelector;
94
+ function isStaleElementError(error) {
95
+ if (!error)
96
+ return false;
97
+ error = error.originalError || error;
98
+ return error instanceof Error && error.name === 'StaleElementReferenceError';
99
+ }
100
+ exports.isStaleElementError = isStaleElementError;
101
+ async function isEqualElements(_driver, element1, element2) {
102
+ if (!element1 || !element2)
103
+ return false;
104
+ const elementId1 = await extractElementId(element1);
105
+ const elementId2 = await extractElementId(element2);
106
+ return elementId1 === elementId2;
107
+ }
108
+ exports.isEqualElements = isEqualElements;
109
+ // #endregion
110
+ // #region COMMANDS
111
+ async function executeScript(driver, script, arg) {
112
+ return driver.executeScript(script, arg);
113
+ }
114
+ exports.executeScript = executeScript;
115
+ async function mainContext(driver) {
116
+ await driver.switchTo().defaultContent();
117
+ return driver;
118
+ }
119
+ exports.mainContext = mainContext;
120
+ async function parentContext(driver) {
121
+ if (process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3') {
122
+ const { Command } = require('selenium-webdriver/lib/command');
123
+ await driver.schedule(new Command('switchToParentFrame'));
124
+ return driver;
125
+ }
126
+ await driver.switchTo().parentFrame();
127
+ return driver;
128
+ }
129
+ exports.parentContext = parentContext;
130
+ async function childContext(driver, element) {
131
+ await driver.switchTo().frame(element);
132
+ return driver;
133
+ }
134
+ exports.childContext = childContext;
135
+ async function findElement(driver, selector, parent) {
136
+ try {
137
+ const root = parent ? transformShadowRoot(driver, parent) : driver;
138
+ return await root.findElement(selector);
139
+ }
140
+ catch (err) {
141
+ if (err.name === 'NoSuchElementError')
142
+ return null;
143
+ else
144
+ throw err;
145
+ }
146
+ }
147
+ exports.findElement = findElement;
148
+ async function findElements(driver, selector, parent) {
149
+ const root = parent ? transformShadowRoot(driver, parent) : driver;
150
+ return root.findElements(selector);
151
+ }
152
+ exports.findElements = findElements;
153
+ async function getWindowSize(driver) {
154
+ try {
155
+ const rect = await driver.manage().window().getRect();
156
+ return { width: rect.width, height: rect.height };
157
+ }
158
+ catch (_a) {
159
+ const { Command } = require('selenium-webdriver/lib/command');
160
+ const getWindowSizeCommand = new Command('getWindowSize');
161
+ const size = driver.manage().window().getSize
162
+ ? await driver.manage().window().getSize()
163
+ : await driver.execute(getWindowSizeCommand);
164
+ return { width: size.width, height: size.height };
165
+ }
166
+ }
167
+ exports.getWindowSize = getWindowSize;
168
+ async function setWindowSize(driver, size) {
169
+ try {
170
+ await driver.manage().window().setRect({ x: 0, y: 0, width: size.width, height: size.height });
171
+ }
172
+ catch (_a) {
173
+ const { Command } = require('selenium-webdriver/lib/command');
174
+ const setWindowPositionCommand = new Command('setWindowPosition').setParameters({ x: 0, y: 0 });
175
+ if (driver.manage().window().setPosition)
176
+ await driver.manage().window().setPosition(0, 0);
177
+ else
178
+ await driver.execute(setWindowPositionCommand);
179
+ const setWindowSizeCommand = new Command('setWindowSize').setParameters(Object.assign({}, size));
180
+ if (driver.manage().window().setSize)
181
+ await driver.manage().window().setSize(size.width, size.height);
182
+ else
183
+ await driver.execute(setWindowSizeCommand);
184
+ }
185
+ }
186
+ exports.setWindowSize = setWindowSize;
187
+ async function getCookies(driver, context) {
188
+ if (context)
189
+ return driver.manage().getCookies();
190
+ let cookies;
191
+ if (utils.types.isFunction(driver, 'sendAndGetDevToolsCommand')) {
192
+ const response = await driver.sendAndGetDevToolsCommand('Network.getAllCookies');
193
+ cookies = response.cookies;
194
+ }
195
+ else {
196
+ const { Command } = require('selenium-webdriver/lib/command');
197
+ const executeCdpCommand = new Command('executeCdp')
198
+ .setParameter('cmd', 'Network.getAllCookies')
199
+ .setParameter('params', {});
200
+ const response = process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3'
201
+ ? await driver.schedule(executeCdpCommand)
202
+ : await driver.execute(executeCdpCommand);
203
+ cookies = response.cookies;
204
+ }
205
+ return cookies.map((cookie) => {
206
+ const copy = Object.assign(Object.assign({}, cookie), { expiry: cookie.expires });
207
+ delete copy.expires;
208
+ delete copy.size;
209
+ delete copy.priority;
210
+ delete copy.session;
211
+ delete copy.sameParty;
212
+ delete copy.sourceScheme;
213
+ delete copy.sourcePort;
214
+ return copy;
215
+ });
216
+ }
217
+ exports.getCookies = getCookies;
218
+ async function getDriverInfo(driver) {
219
+ const session = await driver.getSession();
220
+ return { sessionId: session.getId() };
221
+ }
222
+ exports.getDriverInfo = getDriverInfo;
223
+ async function getCapabilities(driver) {
224
+ try {
225
+ const { Command } = require('selenium-webdriver/lib/command');
226
+ const getSessionDetailsCommand = new Command('getSessionDetails');
227
+ return process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3'
228
+ ? await driver.schedule(getSessionDetailsCommand)
229
+ : await driver.execute(getSessionDetailsCommand);
230
+ }
231
+ catch (_a) {
232
+ const capabilities = await driver.getCapabilities();
233
+ return Array.from(capabilities.keys()).reduce((obj, key) => Object.assign(obj, { key: capabilities.get(key) }), {});
234
+ }
235
+ }
236
+ exports.getCapabilities = getCapabilities;
237
+ async function getTitle(driver) {
238
+ return driver.getTitle();
239
+ }
240
+ exports.getTitle = getTitle;
241
+ async function getUrl(driver) {
242
+ return driver.getCurrentUrl();
243
+ }
244
+ exports.getUrl = getUrl;
245
+ async function visit(driver, url) {
246
+ await driver.get(url);
247
+ }
248
+ exports.visit = visit;
249
+ async function takeScreenshot(driver) {
250
+ return driver.takeScreenshot();
251
+ }
252
+ exports.takeScreenshot = takeScreenshot;
253
+ async function click(driver, element) {
254
+ if (isSelector(element))
255
+ element = await findElement(driver, element);
256
+ await element.click();
257
+ }
258
+ exports.click = click;
259
+ async function hover(driver, element) {
260
+ if (isSelector(element))
261
+ element = await findElement(driver, element);
262
+ if (process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3') {
263
+ const { ActionSequence } = require('selenium-webdriver');
264
+ const action = new ActionSequence(driver);
265
+ await action.mouseMove(element).perform();
266
+ }
267
+ else {
268
+ await driver.actions().move({ origin: element }).perform();
269
+ }
270
+ }
271
+ exports.hover = hover;
272
+ async function type(driver, element, keys) {
273
+ if (isSelector(element))
274
+ element = await findElement(driver, element);
275
+ await element.sendKeys(keys);
276
+ }
277
+ exports.type = type;
278
+ async function scrollIntoView(driver, element, align = false) {
279
+ if (isSelector(element))
280
+ element = await findElement(driver, element);
281
+ await driver.executeScript('arguments[0].scrollIntoView(arguments[1])', element, align);
282
+ }
283
+ exports.scrollIntoView = scrollIntoView;
284
+ async function waitUntilDisplayed(driver, selector, timeout) {
285
+ const element = await findElement(driver, selector);
286
+ await driver.wait(Selenium.until.elementIsVisible(element), timeout);
287
+ }
288
+ exports.waitUntilDisplayed = waitUntilDisplayed;
289
+ // #endregion
290
+ // #region MOBILE COMMANDS
291
+ async function getBarsHeight(driver) {
292
+ const { Command } = require('selenium-webdriver/lib/command');
293
+ const getSystemBarsCommand = new Command('getSystemBars');
294
+ const { statusBar, navigationBar } = process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3'
295
+ ? await driver.schedule(getSystemBarsCommand)
296
+ : await driver.execute(getSystemBarsCommand);
297
+ return {
298
+ statusBarHeight: statusBar.visible ? statusBar.height : 0,
299
+ navigationBarHeight: navigationBar.visible ? navigationBar.height : 0,
300
+ };
301
+ }
302
+ exports.getBarsHeight = getBarsHeight;
303
+ async function getOrientation(driver) {
304
+ const { Command } = require('selenium-webdriver/lib/command');
305
+ const getOrientationCommand = new Command('getOrientation');
306
+ const orientation = process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3'
307
+ ? await driver.schedule(getOrientationCommand)
308
+ : await driver.execute(getOrientationCommand);
309
+ return orientation.toLowerCase();
310
+ }
311
+ exports.getOrientation = getOrientation;
312
+ async function getElementRegion(_driver, element) {
313
+ if (utils.types.isFunction(element.getRect)) {
314
+ return element.getRect();
315
+ }
316
+ else {
317
+ const { x, y } = await element.getLocation();
318
+ const { width, height } = await element.getSize();
319
+ return { x, y, width, height };
320
+ }
321
+ }
322
+ exports.getElementRegion = getElementRegion;
323
+ async function getElementAttribute(_driver, element, attr) {
324
+ return element.getAttribute(attr);
325
+ }
326
+ exports.getElementAttribute = getElementAttribute;
327
+ async function getElementText(_driver, element) {
328
+ return element.getText();
329
+ }
330
+ exports.getElementText = getElementText;
331
+ async function performAction(driver, steps) {
332
+ const { Command } = require('selenium-webdriver/lib/command');
333
+ const performTouchCommand = new Command('performTouch').setParameters({
334
+ actions: steps.map((_a) => {
335
+ var { action } = _a, options = __rest(_a, ["action"]);
336
+ return ({ action, options });
337
+ }),
338
+ });
339
+ if (process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3') {
340
+ await driver.schedule(performTouchCommand);
341
+ }
342
+ else {
343
+ await driver.execute(performTouchCommand);
344
+ }
345
+ }
346
+ exports.performAction = performAction;
347
+ // #endregion
348
+ // #region TESTING
349
+ const browserOptionsNames = {
350
+ chrome: 'goog:chromeOptions',
351
+ firefox: 'moz:firefoxOptions',
352
+ };
353
+ async function build(env) {
354
+ var _a;
355
+ const parseEnv = require('@applitools/test-utils/src/parse-env');
356
+ const { browser, capabilities, url, attach, proxy, configurable = true, appium = false, args = [], headless, } = parseEnv(Object.assign(Object.assign({}, env), { legacy: (_a = env.legacy) !== null && _a !== void 0 ? _a : process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3' }));
357
+ const desiredCapabilities = Object.assign({}, capabilities);
358
+ if (configurable) {
359
+ const browserOptionsName = browserOptionsNames[browser || desiredCapabilities.browserName];
360
+ if (browserOptionsName) {
361
+ const browserOptions = desiredCapabilities[browserOptionsName] || {};
362
+ browserOptions.args = [...(browserOptions.args || []), ...args];
363
+ if (headless)
364
+ browserOptions.args.push('headless');
365
+ if (attach) {
366
+ browserOptions.debuggerAddress = attach === true ? 'localhost:9222' : attach;
367
+ if (browser !== 'firefox')
368
+ browserOptions.w3c = false;
369
+ }
370
+ desiredCapabilities[browserOptionsName] = browserOptions;
371
+ }
372
+ }
373
+ if (appium && browser === 'chrome') {
374
+ desiredCapabilities['appium:chromeOptions'] = { w3c: false };
375
+ }
376
+ const builder = new Selenium.Builder().withCapabilities(desiredCapabilities);
377
+ if (url && !attach)
378
+ builder.usingServer(url.href);
379
+ if (proxy) {
380
+ builder.setProxy({
381
+ proxyType: 'manual',
382
+ httpProxy: proxy.http || proxy.server,
383
+ sslProxy: proxy.https || proxy.server,
384
+ ftpProxy: proxy.ftp,
385
+ noProxy: proxy.bypass,
386
+ });
387
+ }
388
+ const driver = await builder.build();
389
+ return [driver, () => driver.quit()];
390
+ }
391
+ exports.build = build;
392
+ // #endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/spec-driver-selenium",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "keywords": [
5
5
  "selenium",
6
6
  "selenium-webdriver",
@@ -0,0 +1,39 @@
1
+ declare const _default: import('@applitools/types').SpecDriver<Driver, Driver, Element, Selector>;
2
+ export default _default;
3
+ export function isDriver(driver: any): driver is Driver;
4
+ export function isElement(element: any): element is Element;
5
+ export function isSelector(selector: any): selector is Selector;
6
+ export function transformDriver(driver: Driver): Driver;
7
+ export function transformSelector(selector: Selector | (string | { selector: string | Selector; type?: string; })): Selector;
8
+ export function isStaleElementError(error: any): boolean;
9
+ export function isEqualElements(_driver: Driver, element1: Element, element2: Element): Promise<boolean>;
10
+ export function executeScript(driver: Driver, script: string | ((arg: any) => any), arg: any): Promise<any>;
11
+ export function mainContext(driver: Driver): Promise<Driver>;
12
+ export function parentContext(driver: Driver): Promise<Driver>;
13
+ export function childContext(driver: Driver, element: Element): Promise<Driver>;
14
+ export function findElement(driver: Driver, selector: Selector, parent?: Element): Promise<Element>;
15
+ export function findElements(driver: Driver, selector: Selector, parent?: Element): Promise<Array<Element>>;
16
+ export function getWindowSize(driver: Driver): Promise<import('@applitools/types').Size>;
17
+ export function setWindowSize(driver: Driver, size: import('@applitools/types').Size): Promise<void>;
18
+ export function getCookies(driver: Driver, context?: boolean): Promise<Array<import('@applitools/types').Cookie>>;
19
+ export function getDriverInfo(driver: Driver): Promise<import('@applitools/types').DriverInfo>;
20
+ export function getCapabilities(driver: Driver): Promise<Record<string, any>>;
21
+ export function getTitle(driver: Driver): Promise<string>;
22
+ export function getUrl(driver: Driver): Promise<string>;
23
+ export function visit(driver: Driver, url: string): Promise<void>;
24
+ export function takeScreenshot(driver: Driver): Promise<string>;
25
+ export function click(driver: Driver, element: Element | Selector): Promise<void>;
26
+ export function hover(driver: Driver, element: Element | Selector): Promise<void>;
27
+ export function type(driver: Driver, element: Element | Selector, keys: string): Promise<void>;
28
+ export function scrollIntoView(driver: Driver, element: Element | Selector, align: boolean): Promise<void>;
29
+ export function waitUntilDisplayed(driver: Driver, selector: Selector, timeout: number): Promise<void>;
30
+ export function getBarsHeight(driver: Driver): Promise<{ statusBarHeight: number; navigationBarHeight: number; }>;
31
+ export function getOrientation(driver: Driver): Promise<"portrait" | "landscape">;
32
+ export function getElementRegion(_driver: Driver, element: Element): Promise<import('@applitools/types').Region>;
33
+ export function getElementAttribute(_driver: Driver, element: Element, attr: string): Promise<string>;
34
+ export function getElementText(_driver: Driver, element: Element): Promise<string>;
35
+ export function performAction(driver: Driver, steps: Array<any>): Promise<void>;
36
+ export function build(env: any): Promise<[Driver, () => Promise<void>]>;
37
+ export type Driver = import('selenium-webdriver').WebDriver & { __applitoolsBrand?: never; };
38
+ export type Element = import('selenium-webdriver').WebElement & { __applitoolsBrand?: never; };
39
+ export type Selector = (import('selenium-webdriver').Locator | { using: string; value: string; }) & { __applitoolsBrand?: never; };