@nice-digital/wdio-cucumber-steps
Version:
Shared step definitions for Cucumber JS BDD tests in WebdriverIO
42 lines • 1.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.scrollIntoView = exports.scrollNow = void 0;
const checkIfElementExists_1 = require("../lib/checkIfElementExists");
const scrollIntoViewNICE = (selector, contextSelector) => {
var _a;
let element;
if (selector.indexOf("=") > -1) {
// WDIO selectors can be in the form TAG=TEXT so parse these out into xpath
// selectors so we can execute this in the browser
const parts = selector.split("="), tag = parts[0] || "*", text = parts[1], xPath = `.//${tag}[normalize-space() = "${text}"]`;
element = document.evaluate(xPath, contextSelector
? document.querySelector(contextSelector) || document
: document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
element.scrollIntoView();
}
else {
element = (contextSelector
? (_a = document.querySelector(contextSelector)) === null || _a === void 0 ? void 0 : _a.querySelector(selector)
: document.querySelector(selector));
element.scrollIntoView();
}
return 0;
};
async function scrollNow(selector, contextSelector) {
await (0, checkIfElementExists_1.checkIfElementExists)(selector);
await browser.execute(scrollIntoViewNICE, selector, contextSelector);
return true;
}
exports.scrollNow = scrollNow;
/**
* Waits for the given element to be scrolled to.
* The wait is required as we're using smooth scrolling.
*
* @param {String} selector
* @param {Number} timeoutMs Timeout for waiting, in milliseconds
*/
async function scrollIntoView(selector, contextSelector) {
await browser.waitUntil(async () => await scrollNow(selector, contextSelector));
}
exports.scrollIntoView = scrollIntoView;
//# sourceMappingURL=scrollIntoView.js.map