@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
66 lines • 4.65 kB
JavaScript
/**
*
* Sets the timeouts associated with the current session, timeout durations control such
* behaviour as timeouts on script injection, document navigation, and element retrieval.
* For more information and examples, see [timeouts guide](https://webdriver.io/docs/timeouts#selenium-timeouts).
*
* :::info
*
* It is not recommended to set `implicit` timeouts as they impact WebdriverIO's behavior
* and can cause errors in certain commands, e.g. `waitForExist` with reverse flag.
*
* :::
*
* <example>
:setTimeout.js
it('should change timeout duration for session with long code duration', async () => {
await browser.setTimeout({
'pageLoad': 10000,
'script': 60000
});
// Execute code which takes a long time
await browser.executeAsync((done) => {
console.log('Wake me up before you go!');
setTimeout(done, 59000);
});
});
* </example>
*
* @param {Timeouts} timeouts Object containing session timeout values
* @param {Number=} timeouts.implicit Time in milliseconds to retry the element location strategy when finding an element.
* @param {Number=} timeouts.pageLoad Time in milliseconds to wait for the document to finish loading.
* @param {Number=} timeouts.script Scripts injected with [`execute`](https://webdriver.io/docs/api/browser/execute) or [`executeAsync`](https://webdriver.io/docs/api/browser/executeAsync) will run until they hit the script timeout duration, which is also given in milliseconds.
* @see https://w3c.github.io/webdriver/#set-timeouts
*
*/
export async function setTimeout(timeouts) {
if (typeof timeouts !== 'object') {
throw new Error('Parameter for "setTimeout" command needs to be an object');
}
/**
* If value is not an integer, or it is less than 0 or greater than the maximum safe
* integer, return error with error code invalid argument.
*/
const timeoutValues = Object.values(timeouts);
if (timeoutValues.length && timeoutValues.every(timeout => typeof timeout !== 'number' || timeout < 0 || timeout > Number.MAX_SAFE_INTEGER)) {
throw new Error('Specified timeout values are not valid integer (see https://webdriver.io/docs/api/browser/setTimeout for documentation).');
}
const implicit = timeouts.implicit;
// Previously also known as `page load` with JsonWireProtocol
const pageLoad = timeouts['page load'] || timeouts.pageLoad;
const script = timeouts.script;
const setTimeouts = this.setTimeouts.bind(this);
/**
* JsonWireProtocol action
*/
if (!this.isW3C) {
await Promise.all([
isFinite(implicit) && setTimeouts('implicit', implicit),
isFinite(pageLoad) && setTimeouts('page load', pageLoad),
isFinite(script) && setTimeouts('script', script),
].filter(Boolean));
return;
}
return setTimeouts(implicit, pageLoad, script);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0VGltZW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9icm93c2VyL3NldFRpbWVvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFFSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FFNUIsUUFBMkI7SUFFM0IsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUE7SUFDL0UsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0MsSUFBSSxhQUFhLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUMxSSxNQUFNLElBQUksS0FBSyxDQUFDLDBIQUEwSCxDQUFDLENBQUE7SUFDL0ksQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFrQixDQUFBO0lBQzVDLDZEQUE2RDtJQUM3RCxNQUFNLFFBQVEsR0FBSSxRQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUE7SUFDcEUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQWdCLENBQUE7SUFDeEMsTUFBTSxXQUFXLEdBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFcEQ7O09BRUc7SUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO1lBQ3ZELFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztZQUN4RCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7U0FDcEQsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUNsQixPQUFNO0lBQ1YsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDbEQsQ0FBQyJ9