selenium-state-machine
Version:
Write Selenium tests using state machines
105 lines (104 loc) • 3.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.waitDisappear = exports.waitStale = exports.waitInteractive = void 0;
const selenium_webdriver_1 = require("selenium-webdriver");
const Error_1 = require("./Error");
const WebElementDependency_1 = require("./WebElementDependency");
const Dependency_1 = require("./Dependency");
/**
* Wait state for interactivity
* @param dependency name of the dependency to be checked
* @param timeout timeout in ms
* @returns StateData
*/
function waitInteractive(dependency, timeout) {
return {
f: async (provide, dependencies) => {
const dep = dependencies[dependency];
if (dep instanceof (WebElementDependency_1.WebElementDependency) && dep.value instanceof selenium_webdriver_1.WebElement) {
if (await dep.value.isDisplayed() && await dep.value.isEnabled()) {
return provide.nothing().next();
}
else {
return provide.nothing().tryAgain();
}
}
else if (dep === undefined) {
throw new Error_1.CriticalError(`unknown dependency: "${dependency}"`);
}
else {
throw new Error_1.CriticalError(`"${dependency}" is not WebElement dependency`);
}
},
timeout
};
}
exports.waitInteractive = waitInteractive;
/**
* Wait until dependency is stale.
* @param dependency dependency to be checked
* @param timeout timeout in ms
* @returns StateData
*/
function waitStale(dependency, timeout) {
return {
f: async (provide, dependencies) => {
const dep = dependencies[dependency];
if (dep instanceof (WebElementDependency_1.WebElementDependency)) {
try {
await dep.value.isDisplayed();
return provide.nothing().tryAgain();
}
catch (e) {
if (e instanceof Dependency_1.StaleDependencyReferenceError) {
return provide.nothing().next();
}
throw e;
}
}
else if (dep === undefined) {
throw new Error_1.CriticalError(`unknown dependency: "${dependency}"`);
}
else {
throw new Error_1.CriticalError(`"${dependency}" is not WebElement dependency`);
}
},
timeout
};
}
exports.waitStale = waitStale;
/**
* Wait until dependency is not displayed or becomes stale.
* @param dependency name of the dependency
* @param timeout timeout in ms
* @returns StateData
*/
function waitDisappear(dependency, timeout) {
return {
f: async (provide, dependencies) => {
const dep = dependencies[dependency];
if (dep instanceof (WebElementDependency_1.WebElementDependency)) {
try {
if (await dep.value.isDisplayed() === false) {
return provide.nothing().next();
}
return provide.nothing().tryAgain();
}
catch (e) {
if (e instanceof Dependency_1.StaleDependencyReferenceError) {
return provide.nothing().next();
}
throw e;
}
}
else if (dep === undefined) {
throw new Error_1.CriticalError(`unknown dependency: "${dependency}"`);
}
else {
throw new Error_1.CriticalError(`"${dependency}" is not WebElement dependency`);
}
},
timeout
};
}
exports.waitDisappear = waitDisappear;