Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 276x 36091x 429x 429x 427x 427x 427x 399x 2x 2x 2x 397x 30x 4x 4x 4x 4x 26x 69x 953x 5x 10x 5x |
import refetchElement from './utils/refetchElement'
import implicitWait from './utils/implicitWait'
/**
* This method is an command wrapper for elements that checks if a command is called
* that wasn't found on the page and automatically waits for it
*
* @param {Function} fn commandWrap from wdio-sync package (or shim if not running in sync)
*/
export const elementErrorHandler = (fn) => (commandName, commandFn) => {
return function (...args) {
return fn(commandName, async () => {
const element = await implicitWait(this, commandName)
this.elementId = element.elementId
try {
const result = await fn(commandName, commandFn).apply(this, args)
/**
* assume Safari responses like { error: 'no such element', message: '', stacktrace: '' }
* as `stale element reference`
*/
if (result && result.error === 'no such element') {
const err = new Error()
err.name = 'stale element reference'
throw err
}
return result
} catch (error) {
if (error.name === 'stale element reference') {
const element = await refetchElement(this, commandName)
this.elementId = element.elementId
this.parent = element.parent
return await fn(commandName, commandFn).apply(this, args)
}
throw error
}
}).apply(this)
}
}
/**
* handle single command calls from multiremote instances
*/
export const multiremoteHandler = (wrapCommand) => (commandName) => {
return wrapCommand(commandName, function (...args) {
const commandResults = this.instances.map((instanceName) => {
return this[instanceName][commandName](...args)
})
return Promise.all(commandResults)
})
}
|