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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/system-test.js +27 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "system-testing",
3
- "version": "1.0.32",
3
+ "version": "1.0.33",
4
4
  "description": "System testing with Selenium and browsers.",
5
5
  "keywords": [
6
6
  "system",
@@ -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
- await this.getDriver().wait(async () => {
169
- elements = await this.getDriver().findElements(By.css(actualSelector))
177
+ if (actualTimeout == 0) {
178
+ elements = await getElements()
179
+ } else {
180
+ await this.getDriver().wait(async () => {
181
+ elements = await getElements()
170
182
 
171
- return elements.length > 0
172
- }, this.getTimeouts())
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