@seleniumhq/side-runtime 4.0.0-alpha.31 → 4.0.0-alpha.32
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/dist/__tests__/callstack.spec.d.ts +2 -0
- package/dist/__tests__/callstack.spec.d.ts.map +1 -0
- package/dist/__tests__/callstack.spec.js +63 -0
- package/dist/__tests__/callstack.spec.js.map +1 -0
- package/dist/__tests__/integration/playback-webdriver.spec.d.ts +2 -0
- package/dist/__tests__/integration/playback-webdriver.spec.d.ts.map +1 -0
- package/dist/__tests__/integration/playback-webdriver.spec.js +249 -0
- package/dist/__tests__/integration/playback-webdriver.spec.js.map +1 -0
- package/dist/__tests__/playback-tree/command-leveler.spec.d.ts +2 -0
- package/dist/__tests__/playback-tree/command-leveler.spec.d.ts.map +1 -0
- package/dist/__tests__/playback-tree/command-leveler.spec.js +69 -0
- package/dist/__tests__/playback-tree/command-leveler.spec.js.map +1 -0
- package/dist/__tests__/playback-tree/command-node.spec.d.ts +2 -0
- package/dist/__tests__/playback-tree/command-node.spec.d.ts.map +1 -0
- package/dist/__tests__/playback-tree/command-node.spec.js +232 -0
- package/dist/__tests__/playback-tree/command-node.spec.js.map +1 -0
- package/dist/__tests__/playback-tree/playback-tree.spec.d.ts +2 -0
- package/dist/__tests__/playback-tree/playback-tree.spec.d.ts.map +1 -0
- package/dist/__tests__/playback-tree/playback-tree.spec.js +463 -0
- package/dist/__tests__/playback-tree/playback-tree.spec.js.map +1 -0
- package/dist/__tests__/playback-tree/syntax-validation.spec.d.ts +2 -0
- package/dist/__tests__/playback-tree/syntax-validation.spec.d.ts.map +1 -0
- package/dist/__tests__/playback-tree/syntax-validation.spec.js +224 -0
- package/dist/__tests__/playback-tree/syntax-validation.spec.js.map +1 -0
- package/dist/__tests__/playback.spec.d.ts +2 -0
- package/dist/__tests__/playback.spec.d.ts.map +1 -0
- package/dist/__tests__/playback.spec.js +2162 -0
- package/dist/__tests__/playback.spec.js.map +1 -0
- package/dist/__tests__/preprocessors.spec.d.ts +2 -0
- package/dist/__tests__/preprocessors.spec.d.ts.map +1 -0
- package/dist/__tests__/preprocessors.spec.js +141 -0
- package/dist/__tests__/preprocessors.spec.js.map +1 -0
- package/dist/__tests__/util/FakeExecutor.d.ts +32 -0
- package/dist/__tests__/util/FakeExecutor.d.ts.map +1 -0
- package/dist/__tests__/util/FakeExecutor.js +81 -0
- package/dist/__tests__/util/FakeExecutor.js.map +1 -0
- package/dist/__tests__/util/JestFakeExecutor.d.ts +32 -0
- package/dist/__tests__/util/JestFakeExecutor.d.ts.map +1 -0
- package/dist/__tests__/util/JestFakeExecutor.js +79 -0
- package/dist/__tests__/util/JestFakeExecutor.js.map +1 -0
- package/dist/__tests__/utils.spec.d.ts +2 -0
- package/dist/__tests__/utils.spec.d.ts.map +1 -0
- package/dist/__tests__/utils.spec.js +40 -0
- package/dist/__tests__/utils.spec.js.map +1 -0
- package/dist/__tests__/webdriver.spec.d.ts +2 -0
- package/dist/__tests__/webdriver.spec.d.ts.map +1 -0
- package/dist/__tests__/webdriver.spec.js +522 -0
- package/dist/__tests__/webdriver.spec.js.map +1 -0
- package/dist/playback-tree/command-leveler.js +3 -2
- package/dist/playback-tree/command-leveler.js.map +1 -1
- package/dist/playback-tree/command-node.d.ts.map +1 -1
- package/dist/playback-tree/command-node.js +18 -5
- package/dist/playback-tree/command-node.js.map +1 -1
- package/dist/playback-tree/commands.d.ts +10 -10
- package/dist/playback-tree/commands.d.ts.map +1 -1
- package/dist/playback-tree/commands.js.map +1 -1
- package/dist/playback-tree/index.js +4 -2
- package/dist/playback-tree/index.js.map +1 -1
- package/dist/playback-tree/syntax-validation.d.ts.map +1 -1
- package/dist/playback-tree/syntax-validation.js +3 -2
- package/dist/playback-tree/syntax-validation.js.map +1 -1
- package/dist/playback.d.ts +1 -1
- package/dist/playback.d.ts.map +1 -1
- package/dist/playback.js +16 -8
- package/dist/playback.js.map +1 -1
- package/dist/preprocessors.d.ts +1 -1
- package/dist/preprocessors.d.ts.map +1 -1
- package/dist/preprocessors.js +12 -28
- package/dist/preprocessors.js.map +1 -1
- package/dist/recording-syncronizer-webdriver.d.ts +3 -3
- package/dist/recording-syncronizer.d.ts +4 -3
- package/dist/recording-syncronizer.d.ts.map +1 -1
- package/dist/recording-syncronizer.js +1 -1
- package/dist/recording-syncronizer.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/webdriver.d.ts +13 -24
- package/dist/webdriver.d.ts.map +1 -1
- package/dist/webdriver.js +110 -74
- package/dist/webdriver.js.map +1 -1
- package/package.json +8 -6
package/dist/types.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export interface StoreWindowHandleHookInput {
|
|
|
23
23
|
export interface WindowAppearedHookInput {
|
|
24
24
|
command: CommandShape;
|
|
25
25
|
windowHandleName: CommandShape['windowHandleName'];
|
|
26
|
-
windowHandle
|
|
26
|
+
windowHandle?: string;
|
|
27
27
|
}
|
|
28
28
|
export interface WindowSwitchedHookInput {
|
|
29
29
|
windowHandle: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAA;AACxD,OAAO,iBAAiB,EAAE,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,CAAC,EAAE,EAAE,CAAA;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7E;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,CAAA;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAA;IAClD,YAAY,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAA;AACxD,OAAO,iBAAiB,EAAE,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,CAAC,EAAE,EAAE,CAAA;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7E;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,CAAA;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAA;IAClD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,YAAY,CAAA;CACtB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3B,MAAM,WAAW,WAAY,SAAQ,sBAAsB;IACzD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE;QACL,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,oBAAoB,CAAC,EAAE,MAAM,CAAA;QAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED;;;;GAIG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC7C,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB"}
|
package/dist/webdriver.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import webdriver, { Capabilities, WebDriver, WebElement as WebElementShape } fro
|
|
|
2
2
|
import Variables from './variables';
|
|
3
3
|
import { Fn } from '@seleniumhq/side-commons';
|
|
4
4
|
import { CommandShape } from '@seleniumhq/side-model';
|
|
5
|
-
import { PluginRuntimeShape } from './types';
|
|
5
|
+
import { PluginRuntimeShape, StoreWindowHandleHookInput, WindowAppearedHookInput, WindowSwitchedHookInput } from './types';
|
|
6
6
|
export type ExpandedCapabilities = Partial<Capabilities> & {
|
|
7
7
|
browserName: string;
|
|
8
8
|
'goog:chromeOptions'?: Record<string, boolean | number | string | string[]>;
|
|
@@ -39,18 +39,6 @@ export interface BeforePlayHookInput {
|
|
|
39
39
|
export interface CommandHookInput {
|
|
40
40
|
command: CommandShape;
|
|
41
41
|
}
|
|
42
|
-
export interface StoreWindowHandleHookInput {
|
|
43
|
-
windowHandle: string;
|
|
44
|
-
windowHandleName: string;
|
|
45
|
-
}
|
|
46
|
-
export interface WindowAppearedHookInput {
|
|
47
|
-
command: CommandShape;
|
|
48
|
-
windowHandleName: CommandShape['windowHandleName'];
|
|
49
|
-
windowHandle?: string | Error;
|
|
50
|
-
}
|
|
51
|
-
export interface WindowSwitchedHookInput {
|
|
52
|
-
windowHandle?: string | Error;
|
|
53
|
-
}
|
|
54
42
|
export type GeneralHook<T> = (input: T) => Promise<void> | void;
|
|
55
43
|
export interface WebDriverExecutorHooks {
|
|
56
44
|
onBeforePlay?: GeneralHook<BeforePlayHookInput>;
|
|
@@ -109,17 +97,17 @@ export default class WebDriverExecutor {
|
|
|
109
97
|
doRemoveSelection(locator: string, optionLocator: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
110
98
|
doCheck(locator: string, _: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
111
99
|
doUncheck(locator: string, _: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
112
|
-
doClick(locator: string, _
|
|
100
|
+
doClick(locator: string, _?: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
113
101
|
doClickAt(locator: string, coordString: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
114
|
-
doDoubleClick(locator: string, _
|
|
102
|
+
doDoubleClick(locator: string, _?: string, _commandObject?: Partial<CommandShape>): Promise<void>;
|
|
115
103
|
doDoubleClickAt(locator: string, coordString: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
116
104
|
doDragAndDropToObject(dragLocator: string, dropLocator: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
117
|
-
doMouseDown(locator: string, _
|
|
105
|
+
doMouseDown(locator: string, _?: string, _commandObject?: Partial<CommandShape>): Promise<void>;
|
|
118
106
|
doMouseDownAt(locator: string, coordString: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
119
107
|
doMouseMoveAt(locator: string, coordString: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
120
|
-
doMouseOut(locator: string, _
|
|
121
|
-
doMouseOver(locator: string, _
|
|
122
|
-
doMouseUp(locator: string, _
|
|
108
|
+
doMouseOut(locator: string, _?: string, _commandObject?: Partial<CommandShape>): Promise<void>;
|
|
109
|
+
doMouseOver(locator: string, _?: string, _commandObject?: Partial<CommandShape>): Promise<void>;
|
|
110
|
+
doMouseUp(locator: string, _?: string, _commandObject?: Partial<CommandShape>): Promise<void>;
|
|
123
111
|
doMouseUpAt(locator: string, coordString: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
124
112
|
doSelect(locator: string, optionLocator: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
125
113
|
doEditContent(locator: string, value: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
@@ -151,8 +139,8 @@ export default class WebDriverExecutor {
|
|
|
151
139
|
doAssert(variableName: string, value: string): Promise<void>;
|
|
152
140
|
doAssertAlert(expectedText: string): Promise<void>;
|
|
153
141
|
doAssertConfirmation(expectedText: string): Promise<void>;
|
|
154
|
-
doAssertEditable(locator: string, _
|
|
155
|
-
doAssertNotEditable(locator: string, _
|
|
142
|
+
doAssertEditable(locator: string, _?: string, _commandObject?: Partial<CommandShape>): Promise<void>;
|
|
143
|
+
doAssertNotEditable(locator: string, _?: string, _commandObject?: Partial<CommandShape>): Promise<void>;
|
|
156
144
|
doAssertPrompt(expectedText: string): Promise<void>;
|
|
157
145
|
doAssertTitle(title: string): Promise<void>;
|
|
158
146
|
doAssertElementPresent(locator: string, _: string, commandObject?: Partial<CommandShape>): Promise<void>;
|
|
@@ -173,10 +161,11 @@ export default class WebDriverExecutor {
|
|
|
173
161
|
doRun(): Promise<void>;
|
|
174
162
|
doSetSpeed(): Promise<void>;
|
|
175
163
|
evaluateConditional(script: ScriptShape): Promise<WebDriverExecutorCondEvalResult>;
|
|
176
|
-
elementIsLocated(locator: string,
|
|
177
|
-
|
|
164
|
+
elementIsLocated(locator: string, ..._fallbacks: (undefined | [string, string][])[]): Promise<WebElementShape | null>;
|
|
165
|
+
withCancel<T extends () => Promise<any>>(poller: T): () => Promise<any>;
|
|
166
|
+
waitForElement(locator: string, ...fallbacks: (undefined | [string, string][])[]): Promise<WebElementShape>;
|
|
178
167
|
isElementEditable(element: WebElementShape): Promise<boolean>;
|
|
179
|
-
waitForElementVisible(locator: string, timeout: number,
|
|
168
|
+
waitForElementVisible(locator: string, timeout: number, ...fallbacks: (undefined | [string, string][])[]): Promise<webdriver.WebElement>;
|
|
180
169
|
waitForText(locator: string, text: string, fallback?: [string, string][]): Promise<void>;
|
|
181
170
|
}
|
|
182
171
|
export {};
|
package/dist/webdriver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webdriver.d.ts","sourceRoot":"","sources":["../src/webdriver.ts"],"names":[],"mappings":"AAiBA,OAAO,SAAS,EAAE,EAChB,YAAY,EACZ,SAAS,EACT,UAAU,IAAI,eAAe,EAC9B,MAAM,oBAAoB,CAAA;AAS3B,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"webdriver.d.ts","sourceRoot":"","sources":["../src/webdriver.ts"],"names":[],"mappings":"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"}
|
package/dist/webdriver.js
CHANGED
|
@@ -74,7 +74,8 @@ class WebDriverExecutor {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
async cleanup() {
|
|
77
|
-
|
|
77
|
+
// await this.cancel()
|
|
78
|
+
if (this.driver) {
|
|
78
79
|
await this.driver.quit();
|
|
79
80
|
// @ts-expect-error
|
|
80
81
|
this.driver = undefined;
|
|
@@ -130,7 +131,7 @@ class WebDriverExecutor {
|
|
|
130
131
|
async waitForNewWindow(timeout = 2000) {
|
|
131
132
|
const finder = new Promise((resolve) => {
|
|
132
133
|
const start = Date.now();
|
|
133
|
-
const findHandle = async () => {
|
|
134
|
+
const findHandle = this.withCancel(async () => {
|
|
134
135
|
if (Date.now() - start > timeout) {
|
|
135
136
|
resolve(undefined);
|
|
136
137
|
return;
|
|
@@ -143,7 +144,7 @@ class WebDriverExecutor {
|
|
|
143
144
|
}
|
|
144
145
|
// cant find, wait next time.
|
|
145
146
|
setTimeout(findHandle, 200);
|
|
146
|
-
};
|
|
147
|
+
});
|
|
147
148
|
findHandle();
|
|
148
149
|
});
|
|
149
150
|
return this.driver.wait(finder, timeout);
|
|
@@ -230,7 +231,7 @@ class WebDriverExecutor {
|
|
|
230
231
|
}
|
|
231
232
|
// mouse commands
|
|
232
233
|
async doAddSelection(locator, optionLocator, commandObject = {}) {
|
|
233
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
234
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
234
235
|
const option = await element.findElement(parseOptionLocator(optionLocator));
|
|
235
236
|
const selections = (await this.driver.executeScript('return arguments[0].selectedOptions', element));
|
|
236
237
|
if (!(await findElement(selections, option))) {
|
|
@@ -238,7 +239,7 @@ class WebDriverExecutor {
|
|
|
238
239
|
}
|
|
239
240
|
}
|
|
240
241
|
async doRemoveSelection(locator, optionLocator, commandObject = {}) {
|
|
241
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
242
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
242
243
|
if (!(await element.getAttribute('multiple'))) {
|
|
243
244
|
throw new Error('Given element is not a multiple select type element');
|
|
244
245
|
}
|
|
@@ -249,37 +250,38 @@ class WebDriverExecutor {
|
|
|
249
250
|
}
|
|
250
251
|
}
|
|
251
252
|
async doCheck(locator, _, commandObject = {}) {
|
|
252
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
253
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
253
254
|
if (!(await element.isSelected())) {
|
|
254
255
|
await element.click();
|
|
255
256
|
}
|
|
256
257
|
}
|
|
257
258
|
async doUncheck(locator, _, commandObject = {}) {
|
|
258
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
259
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
259
260
|
if (await element.isSelected()) {
|
|
260
261
|
await element.click();
|
|
261
262
|
}
|
|
262
263
|
}
|
|
263
|
-
async doClick(locator, _) {
|
|
264
|
-
const element = await this.waitForElementVisible(locator, this.implicitWait);
|
|
264
|
+
async doClick(locator, _, commandObject = {}) {
|
|
265
|
+
const element = await this.waitForElementVisible(locator, this.implicitWait, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
265
266
|
await element.click();
|
|
266
267
|
}
|
|
267
268
|
async doClickAt(locator, coordString, commandObject = {}) {
|
|
268
269
|
const coords = parseCoordString(coordString);
|
|
269
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
270
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
270
271
|
await this.driver
|
|
271
272
|
.actions({ bridge: true })
|
|
272
273
|
.move({ origin: element, ...coords })
|
|
273
274
|
.click()
|
|
274
275
|
.perform();
|
|
275
276
|
}
|
|
276
|
-
async doDoubleClick(locator, _,
|
|
277
|
-
const
|
|
277
|
+
async doDoubleClick(locator, _, _commandObject) {
|
|
278
|
+
const commandObject = _commandObject || {};
|
|
279
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
278
280
|
await this.driver.actions({ bridge: true }).doubleClick(element).perform();
|
|
279
281
|
}
|
|
280
282
|
async doDoubleClickAt(locator, coordString, commandObject = {}) {
|
|
281
283
|
const coords = parseCoordString(coordString);
|
|
282
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
284
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
283
285
|
await this.driver
|
|
284
286
|
.actions({ bridge: true })
|
|
285
287
|
.move({ origin: element, ...coords })
|
|
@@ -294,8 +296,9 @@ class WebDriverExecutor {
|
|
|
294
296
|
.dragAndDrop(drag, drop)
|
|
295
297
|
.perform();
|
|
296
298
|
}
|
|
297
|
-
async doMouseDown(locator, _,
|
|
298
|
-
const
|
|
299
|
+
async doMouseDown(locator, _, _commandObject) {
|
|
300
|
+
const commandObject = _commandObject || {};
|
|
301
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
299
302
|
await this.driver
|
|
300
303
|
.actions({ bridge: true })
|
|
301
304
|
.move({ origin: element })
|
|
@@ -304,7 +307,7 @@ class WebDriverExecutor {
|
|
|
304
307
|
}
|
|
305
308
|
async doMouseDownAt(locator, coordString, commandObject = {}) {
|
|
306
309
|
const coords = parseCoordString(coordString);
|
|
307
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
310
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
308
311
|
await this.driver
|
|
309
312
|
.actions({ bridge: true })
|
|
310
313
|
.move({ origin: element, ...coords })
|
|
@@ -313,14 +316,15 @@ class WebDriverExecutor {
|
|
|
313
316
|
}
|
|
314
317
|
async doMouseMoveAt(locator, coordString, commandObject = {}) {
|
|
315
318
|
const coords = parseCoordString(coordString);
|
|
316
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
319
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
317
320
|
await this.driver
|
|
318
321
|
.actions({ bridge: true })
|
|
319
322
|
.move({ origin: element, ...coords })
|
|
320
323
|
.perform();
|
|
321
324
|
}
|
|
322
|
-
async doMouseOut(locator, _,
|
|
323
|
-
const
|
|
325
|
+
async doMouseOut(locator, _, _commandObject) {
|
|
326
|
+
const commandObject = _commandObject || {};
|
|
327
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
324
328
|
const [rect, vp] = await this.driver.executeScript('return [arguments[0].getBoundingClientRect(), {height: window.innerHeight, width: window.innerWidth}];', element);
|
|
325
329
|
// try top
|
|
326
330
|
if (rect.top > 0) {
|
|
@@ -348,7 +352,7 @@ class WebDriverExecutor {
|
|
|
348
352
|
}
|
|
349
353
|
// try left
|
|
350
354
|
else if (rect.left > 0) {
|
|
351
|
-
const x = -rect.right / 2;
|
|
355
|
+
const x = Math.round(-rect.right / 2);
|
|
352
356
|
return await this.driver
|
|
353
357
|
.actions({ bridge: true })
|
|
354
358
|
.move({ origin: element, x })
|
|
@@ -356,15 +360,17 @@ class WebDriverExecutor {
|
|
|
356
360
|
}
|
|
357
361
|
throw new Error('Unable to perform mouse out as the element takes up the entire viewport');
|
|
358
362
|
}
|
|
359
|
-
async doMouseOver(locator, _,
|
|
360
|
-
const
|
|
363
|
+
async doMouseOver(locator, _, _commandObject) {
|
|
364
|
+
const commandObject = _commandObject || {};
|
|
365
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
361
366
|
await this.driver
|
|
362
367
|
.actions({ bridge: true })
|
|
363
368
|
.move({ origin: element })
|
|
364
369
|
.perform();
|
|
365
370
|
}
|
|
366
|
-
async doMouseUp(locator, _,
|
|
367
|
-
const
|
|
371
|
+
async doMouseUp(locator, _, _commandObject) {
|
|
372
|
+
const commandObject = _commandObject || {};
|
|
373
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
368
374
|
await this.driver
|
|
369
375
|
.actions({ bridge: true })
|
|
370
376
|
.move({ origin: element })
|
|
@@ -373,7 +379,7 @@ class WebDriverExecutor {
|
|
|
373
379
|
}
|
|
374
380
|
async doMouseUpAt(locator, coordString, commandObject = {}) {
|
|
375
381
|
const coords = parseCoordString(coordString);
|
|
376
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
382
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
377
383
|
await this.driver
|
|
378
384
|
.actions({ bridge: true })
|
|
379
385
|
.move({ origin: element, ...coords })
|
|
@@ -381,35 +387,50 @@ class WebDriverExecutor {
|
|
|
381
387
|
.perform();
|
|
382
388
|
}
|
|
383
389
|
async doSelect(locator, optionLocator, commandObject = {}) {
|
|
384
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
390
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
385
391
|
const option = await element.findElement(parseOptionLocator(optionLocator));
|
|
386
392
|
await option.click();
|
|
387
393
|
}
|
|
388
394
|
// keyboard commands
|
|
389
395
|
async doEditContent(locator, value, commandObject = {}) {
|
|
390
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
396
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
391
397
|
await this.driver.executeScript("if(arguments[0].contentEditable === 'true') {arguments[0].innerText = arguments[1]} else {throw new Error('Element is not content editable')}", element, value);
|
|
392
398
|
}
|
|
393
399
|
async doType(locator, value, commandObject = {}) {
|
|
394
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
400
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
395
401
|
await element.clear();
|
|
396
402
|
await element.sendKeys(value);
|
|
397
403
|
}
|
|
398
404
|
async doSendKeys(locator, value, commandObject = {}) {
|
|
399
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
405
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
400
406
|
await element.sendKeys(...value);
|
|
401
407
|
}
|
|
402
408
|
// wait commands
|
|
403
409
|
async doWaitForElementEditable(locator, timeout) {
|
|
404
|
-
const
|
|
405
|
-
|
|
410
|
+
const condition = new Condition('for element to be editable', async () => {
|
|
411
|
+
const element = await this.driver.findElement(parseLocator(locator));
|
|
412
|
+
if (!element) {
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
const isEditable = await this.isElementEditable(element);
|
|
416
|
+
return isEditable;
|
|
417
|
+
});
|
|
418
|
+
await this.driver.wait(condition, parseInt(timeout));
|
|
406
419
|
}
|
|
407
420
|
async doWaitForElementNotEditable(locator, timeout) {
|
|
408
|
-
const
|
|
409
|
-
|
|
421
|
+
const condition = new Condition('for element to be editable', async () => {
|
|
422
|
+
const element = await this.driver.findElement(parseLocator(locator));
|
|
423
|
+
if (!element) {
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
const isEditable = await this.isElementEditable(element);
|
|
427
|
+
return !isEditable;
|
|
428
|
+
});
|
|
429
|
+
await this.driver.wait(condition, parseInt(timeout));
|
|
410
430
|
}
|
|
411
431
|
async doWaitForElementPresent(locator, timeout, commandObj = {}) {
|
|
412
|
-
await this.
|
|
432
|
+
const locatorCondition = new WebElementCondition('for element to be present', async () => await this.elementIsLocated(locator, commandObj.targetFallback, commandObj.targets, commandObj.fallbackTargets));
|
|
433
|
+
await this.driver.wait(locatorCondition, Number(timeout));
|
|
413
434
|
}
|
|
414
435
|
async doWaitForElementNotPresent(locator, timeout) {
|
|
415
436
|
const parsedLocator = parseLocator(locator);
|
|
@@ -493,7 +514,7 @@ class WebDriverExecutor {
|
|
|
493
514
|
return Promise.resolve();
|
|
494
515
|
}
|
|
495
516
|
async doStoreText(locator, variable, commandObject = {}) {
|
|
496
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
517
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
497
518
|
const text = await element.getText();
|
|
498
519
|
this.variables.set(variable, text);
|
|
499
520
|
}
|
|
@@ -502,7 +523,7 @@ class WebDriverExecutor {
|
|
|
502
523
|
this.variables.set(variable, title);
|
|
503
524
|
}
|
|
504
525
|
async doStoreValue(locator, variable, commandObject = {}) {
|
|
505
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
526
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
506
527
|
const value = await element.getAttribute('value');
|
|
507
528
|
this.variables.set(variable, value);
|
|
508
529
|
}
|
|
@@ -543,14 +564,16 @@ class WebDriverExecutor {
|
|
|
543
564
|
"'");
|
|
544
565
|
}
|
|
545
566
|
}
|
|
546
|
-
async doAssertEditable(locator, _,
|
|
547
|
-
const
|
|
567
|
+
async doAssertEditable(locator, _, _commandObject) {
|
|
568
|
+
const commandObject = _commandObject || {};
|
|
569
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
548
570
|
if (!(await this.isElementEditable(element))) {
|
|
549
571
|
throw new errors_1.AssertionError('Element is not editable');
|
|
550
572
|
}
|
|
551
573
|
}
|
|
552
|
-
async doAssertNotEditable(locator, _,
|
|
553
|
-
const
|
|
574
|
+
async doAssertNotEditable(locator, _, _commandObject) {
|
|
575
|
+
const commandObject = _commandObject || {};
|
|
576
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
554
577
|
if (await this.isElementEditable(element)) {
|
|
555
578
|
throw new errors_1.AssertionError('Element is editable');
|
|
556
579
|
}
|
|
@@ -582,21 +605,21 @@ class WebDriverExecutor {
|
|
|
582
605
|
}
|
|
583
606
|
}
|
|
584
607
|
async doAssertText(locator, value, commandObject = {}) {
|
|
585
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
608
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
586
609
|
const text = await element.getText();
|
|
587
610
|
if (text !== value) {
|
|
588
611
|
throw new errors_1.AssertionError("Actual value '" + text + "' did not match '" + value + "'");
|
|
589
612
|
}
|
|
590
613
|
}
|
|
591
614
|
async doAssertNotText(locator, value, commandObject = {}) {
|
|
592
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
615
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
593
616
|
const text = await element.getText();
|
|
594
617
|
if (text === value) {
|
|
595
618
|
throw new errors_1.AssertionError("Actual value '" + text + "' did match '" + value + "'");
|
|
596
619
|
}
|
|
597
620
|
}
|
|
598
621
|
async doAssertValue(locator, value, commandObject = {}) {
|
|
599
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
622
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
600
623
|
const elementValue = await element.getAttribute('value');
|
|
601
624
|
if (elementValue !== value) {
|
|
602
625
|
throw new errors_1.AssertionError("Actual value '" + elementValue + "' did not match '" + value + "'");
|
|
@@ -604,40 +627,40 @@ class WebDriverExecutor {
|
|
|
604
627
|
}
|
|
605
628
|
// not generally implemented
|
|
606
629
|
async doAssertNotValue(locator, value, commandObject = {}) {
|
|
607
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
630
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
608
631
|
const elementValue = await element.getAttribute('value');
|
|
609
632
|
if (elementValue === value) {
|
|
610
633
|
throw new errors_1.AssertionError("Actual value '" + elementValue + "' did match '" + value + "'");
|
|
611
634
|
}
|
|
612
635
|
}
|
|
613
636
|
async doAssertChecked(locator, _, commandObject = {}) {
|
|
614
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
637
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
615
638
|
if (!(await element.isSelected())) {
|
|
616
639
|
throw new errors_1.AssertionError('Element is not checked, expected to be checked');
|
|
617
640
|
}
|
|
618
641
|
}
|
|
619
642
|
async doAssertNotChecked(locator, _, commandObject = {}) {
|
|
620
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
643
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
621
644
|
if (await element.isSelected()) {
|
|
622
645
|
throw new errors_1.AssertionError('Element is checked, expected to be unchecked');
|
|
623
646
|
}
|
|
624
647
|
}
|
|
625
648
|
async doAssertSelectedValue(locator, value, commandObject = {}) {
|
|
626
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
649
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
627
650
|
const elementValue = await element.getAttribute('value');
|
|
628
651
|
if (elementValue !== value) {
|
|
629
652
|
throw new errors_1.AssertionError("Actual value '" + elementValue + "' did not match '" + value + "'");
|
|
630
653
|
}
|
|
631
654
|
}
|
|
632
655
|
async doAssertNotSelectedValue(locator, value, commandObject = {}) {
|
|
633
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
656
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
634
657
|
const elementValue = await element.getAttribute('value');
|
|
635
658
|
if (elementValue === value) {
|
|
636
659
|
throw new errors_1.AssertionError("Actual value '" + elementValue + "' did match '" + value + "'");
|
|
637
660
|
}
|
|
638
661
|
}
|
|
639
662
|
async doAssertSelectedLabel(locator, label, commandObject = {}) {
|
|
640
|
-
const element = await this.waitForElement(locator, commandObject.targetFallback);
|
|
663
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
641
664
|
const selectedValue = await element.getAttribute('value');
|
|
642
665
|
const selectedOption = await element.findElement(By.xpath(`option[@value="${selectedValue}"]`));
|
|
643
666
|
const selectedOptionLabel = await selectedOption.getText();
|
|
@@ -650,7 +673,7 @@ class WebDriverExecutor {
|
|
|
650
673
|
}
|
|
651
674
|
}
|
|
652
675
|
async doAssertNotSelectedLabel(locator, label, commandObject = {}) {
|
|
653
|
-
const element = await this.waitForElement(locator, commandObject
|
|
676
|
+
const element = await this.waitForElement(locator, commandObject.targetFallback, commandObject.targets, commandObject.fallbackTargets);
|
|
654
677
|
const selectedValue = await element.getAttribute('value');
|
|
655
678
|
const selectedOption = await element.findElement(By.xpath(`option[@value="${selectedValue}"]`));
|
|
656
679
|
const selectedOptionLabel = await selectedOption.getText();
|
|
@@ -682,55 +705,68 @@ class WebDriverExecutor {
|
|
|
682
705
|
value: !!result,
|
|
683
706
|
};
|
|
684
707
|
}
|
|
685
|
-
async elementIsLocated(locator,
|
|
708
|
+
async elementIsLocated(locator, ..._fallbacks) {
|
|
686
709
|
const elementLocator = parseLocator(locator);
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
catch (e) {
|
|
697
|
-
// try the next one
|
|
698
|
-
}
|
|
699
|
-
}
|
|
710
|
+
const matches = await this.driver.findElements(elementLocator);
|
|
711
|
+
if (matches.length > 0)
|
|
712
|
+
return matches[0];
|
|
713
|
+
const fallbacks = _fallbacks.filter(Boolean).flat();
|
|
714
|
+
for (let i = 0; i < fallbacks.length; i++) {
|
|
715
|
+
const loc = parseLocator(fallbacks[i][0]);
|
|
716
|
+
const fallbackMatches = await this.driver.findElements(loc);
|
|
717
|
+
if (fallbackMatches.length)
|
|
718
|
+
return fallbackMatches[0];
|
|
700
719
|
}
|
|
701
720
|
return null;
|
|
702
721
|
}
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
722
|
+
withCancel(poller) {
|
|
723
|
+
let resolveCancel;
|
|
724
|
+
const cancelPromise = new Promise((res) => {
|
|
725
|
+
resolveCancel = res;
|
|
707
726
|
});
|
|
727
|
+
let cancelled = false;
|
|
728
|
+
this.cancellable = {
|
|
729
|
+
cancel: () => {
|
|
730
|
+
cancelled = true;
|
|
731
|
+
return cancelPromise;
|
|
732
|
+
},
|
|
733
|
+
};
|
|
734
|
+
return async () => {
|
|
735
|
+
if (cancelled) {
|
|
736
|
+
resolveCancel();
|
|
737
|
+
throw new Error('aborted');
|
|
738
|
+
}
|
|
739
|
+
return await poller();
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
async waitForElement(locator, ...fallbacks) {
|
|
743
|
+
const locatorCondition = new WebElementCondition('for element to be located', this.withCancel(async () => await this.elementIsLocated(locator, ...fallbacks)));
|
|
708
744
|
return await this.driver.wait(locatorCondition, this.implicitWait);
|
|
709
745
|
}
|
|
710
746
|
async isElementEditable(element) {
|
|
711
747
|
const { enabled, readonly } = await this.driver.executeScript('return { enabled: !arguments[0].disabled, readonly: arguments[0].readOnly };', element);
|
|
712
748
|
return enabled && !readonly;
|
|
713
749
|
}
|
|
714
|
-
async waitForElementVisible(locator, timeout,
|
|
715
|
-
const visibleCondition = new WebElementCondition('for element to be visible', async () => {
|
|
716
|
-
const el = await this.elementIsLocated(locator,
|
|
750
|
+
async waitForElementVisible(locator, timeout, ...fallbacks) {
|
|
751
|
+
const visibleCondition = new WebElementCondition('for element to be visible', this.withCancel(async () => {
|
|
752
|
+
const el = await this.elementIsLocated(locator, ...fallbacks);
|
|
717
753
|
if (!el)
|
|
718
754
|
return null;
|
|
719
755
|
if (!(await el.isDisplayed()))
|
|
720
756
|
return null;
|
|
721
757
|
return el;
|
|
722
|
-
});
|
|
758
|
+
}));
|
|
723
759
|
return await this.driver.wait(visibleCondition, timeout);
|
|
724
760
|
}
|
|
725
761
|
async waitForText(locator, text, fallback = []) {
|
|
726
762
|
const timeout = this.implicitWait;
|
|
727
|
-
const textCondition = new Condition('for text to be present in element', async () => {
|
|
763
|
+
const textCondition = new Condition('for text to be present in element', this.withCancel(async () => {
|
|
728
764
|
const el = await this.elementIsLocated(locator, fallback);
|
|
729
765
|
if (!el)
|
|
730
766
|
return null;
|
|
731
767
|
const elText = await el.getText();
|
|
732
768
|
return elText === text;
|
|
733
|
-
});
|
|
769
|
+
}));
|
|
734
770
|
await this.driver.wait(textCondition, timeout);
|
|
735
771
|
}
|
|
736
772
|
}
|