Small library to manage moments when you need to wait something to happen. So you don't need to write wait-events by yourself.
npm install waitee
or
yarn install waitee
for
- how long to wait for some event to happen in ms. Zero means to wait for unlimited time. (default Infinity)
attempts
- how many attempts to do before throwing the error. Zero means unlimited attempts. (default Infinity)
interval
- how often to check the event in ms. (default 100 ms.)
a
- variable 'a', see examples (default null)
b
- variable 'b', see examples (default null)
noerror
- when time passed in 'for' option was over or all attempts were done, doesn't throw the error. Instead it will return false
when wait-function finishes without success condition. (default false)
You can pass options using 2 ways:
const wait = require('waitee');
(async function example() {
await wait.until({
for: 10000, // 10 seconds
interval: 500, // every 500 ms.
a: some_variable
})
.updates();
})();
or
const wait = require('waitee');
(async function example() {
await wait.until()
.for(10000)
.interval(500)
.a(some_variable)
.updates();
})();
const wait = require('waitee');
(async function example() {
await wait.for(2000);
})();
const wait = require('waitee');
(async function example() {
let max = 20;
const custom_function = async () => {
if (--max === 0) {
return true;
}
await wait.for(100);
return false
};
await wait.until(custom_function)
})();
In such case you can pass options like this
const wait = require('waitee');
(async function example() {
let max = 20;
const custom_function = async () => {
if (--max === 0) {
return true;
}
await wait.for(100);
return false
};
await wait.until(custom_function, { attempts: 100 });
})();
const wait = require('waitee');
(async function example() {
// Driver initialization
let elements = await driver.findElements(By.css('td'));
await wait.until()
.a(async () => (await driver.findElements(By.css('td'))).length)
.greater(elements.length);
})();
You can call this function with 4 ways.
await wait.until()
.a(async () => (await driver.findElements(By.css('td'))).length)
.greater(elements.length); |
equals |
await wait.until()
.a(async () => (await driver.findElements(By.css('td'))).length)
.greater()
.b(elements.length); |
equals |
await wait.until()
.greater(async () => (await driver.findElements(By.css('td'))).length, elements.length); |
equals |
await wait.until({
a: async () => (await driver.findElements(By.css('td'))).length,
b: elements.length
})
.greater(); |
These methods work for all wait events.
It uses fast-clone and fast-equals to compare old result with the new one.
const wait = require('waitee');
(async function example() {
let a = {
value: 1
};
setTimeout(() => a.value = 2, 2000);
await wait.until()
.a(a)
.updates();
})();
await wait.until()
.a(a)
.updates(); |
equals |
await wait.until()
.updates(a); |
equals |
await wait.until({ a: a })
.updates(); |
You can find more examples in tests folder.
- Update README (fix eng. mistakes, add more examples)