system-testing 1.0.32 → 1.0.33
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/package.json +1 -1
- package/src/system-test.js +27 -8
package/package.json
CHANGED
package/src/system-test.js
CHANGED
|
@@ -26,6 +26,7 @@ export default class SystemTest {
|
|
|
26
26
|
driver = undefined
|
|
27
27
|
|
|
28
28
|
_started = false
|
|
29
|
+
_driverTimeouts = 5000
|
|
29
30
|
_timeouts = 5000
|
|
30
31
|
|
|
31
32
|
/**
|
|
@@ -151,25 +152,37 @@ export default class SystemTest {
|
|
|
151
152
|
* Finds all elements by CSS selector
|
|
152
153
|
* @param {string} selector
|
|
153
154
|
* @param {object} args
|
|
155
|
+
* @param {number} [args.timeout]
|
|
154
156
|
* @param {boolean} [args.visible]
|
|
155
157
|
* @param {boolean} [args.useBaseSelector]
|
|
156
158
|
* @returns {Promise<import("selenium-webdriver").WebElement[]>}
|
|
157
159
|
*/
|
|
158
160
|
async all(selector, args = {}) {
|
|
159
|
-
const {visible = true, useBaseSelector = true, ...restArgs} = args
|
|
161
|
+
const {visible = true, timeout, useBaseSelector = true, ...restArgs} = args
|
|
160
162
|
const restArgsKeys = Object.keys(restArgs)
|
|
163
|
+
let actualTimeout
|
|
164
|
+
|
|
165
|
+
if (timeout === undefined) {
|
|
166
|
+
actualTimeout = this._driverTimeouts
|
|
167
|
+
} else {
|
|
168
|
+
actualTimeout = timeout
|
|
169
|
+
}
|
|
161
170
|
|
|
162
171
|
if (restArgsKeys.length > 0) throw new Error(`Unknown arguments: ${restArgsKeys.join(", ")}`)
|
|
163
172
|
|
|
164
173
|
const actualSelector = useBaseSelector ? this.getSelector(selector) : selector
|
|
165
|
-
|
|
174
|
+
const getElements = async () => await this.getDriver().findElements(By.css(actualSelector))
|
|
166
175
|
let elements = []
|
|
167
176
|
|
|
168
|
-
|
|
169
|
-
elements = await
|
|
177
|
+
if (actualTimeout == 0) {
|
|
178
|
+
elements = await getElements()
|
|
179
|
+
} else {
|
|
180
|
+
await this.getDriver().wait(async () => {
|
|
181
|
+
elements = await getElements()
|
|
170
182
|
|
|
171
|
-
|
|
172
|
-
|
|
183
|
+
return elements.length > 0
|
|
184
|
+
}, actualTimeout)
|
|
185
|
+
}
|
|
173
186
|
|
|
174
187
|
const activeElements = []
|
|
175
188
|
|
|
@@ -232,13 +245,17 @@ export default class SystemTest {
|
|
|
232
245
|
* @returns {Promise<import("selenium-webdriver").WebElement>}
|
|
233
246
|
*/
|
|
234
247
|
async find(selector, args = {}) {
|
|
235
|
-
let elements
|
|
248
|
+
let elements = []
|
|
236
249
|
|
|
237
250
|
try {
|
|
238
251
|
elements = await this.all(selector, args)
|
|
239
252
|
} catch (error) {
|
|
240
253
|
// Re-throw to recover stack trace
|
|
241
254
|
if (error instanceof Error) {
|
|
255
|
+
if (error.message.startsWith("Wait timed out after")) {
|
|
256
|
+
elements = []
|
|
257
|
+
}
|
|
258
|
+
|
|
242
259
|
throw new Error(`${error.message} (selector: ${this.getSelector(selector)})`)
|
|
243
260
|
} else {
|
|
244
261
|
throw new Error(`${error} (selector: ${this.getSelector(selector)})`)
|
|
@@ -430,11 +447,12 @@ export default class SystemTest {
|
|
|
430
447
|
|
|
431
448
|
// Not found at all
|
|
432
449
|
if (elements.length === 0) {
|
|
433
|
-
return true
|
|
450
|
+
return true
|
|
434
451
|
}
|
|
435
452
|
|
|
436
453
|
// Found but not visible
|
|
437
454
|
const isDisplayed = await elements[0].isDisplayed()
|
|
455
|
+
|
|
438
456
|
return !isDisplayed
|
|
439
457
|
},
|
|
440
458
|
this.getTimeouts()
|
|
@@ -589,6 +607,7 @@ export default class SystemTest {
|
|
|
589
607
|
* @returns {Promise<void>}
|
|
590
608
|
*/
|
|
591
609
|
async driverSetTimeouts(newTimeout) {
|
|
610
|
+
this._driverTimeouts = newTimeout
|
|
592
611
|
await this.getDriver().manage().setTimeouts({implicit: newTimeout})
|
|
593
612
|
}
|
|
594
613
|
|