@wdio/image-comparison-core
Version:
Image comparison core module for @wdio/visual-service - WebdriverIO visual testing framework
61 lines (60 loc) • 2.57 kB
JavaScript
/**
* Hide or remove elements on the page
*/
export default function hideRemoveElements(hideRemoveElements, hideRemove) {
const visitedSelectors = {};
hideRemoveElements.hide.forEach((element) => {
if (Array.isArray(element)) {
return element.forEach((singleElement) => hideRemoveEl(singleElement, 'visibility', hideRemove));
}
hideRemoveEl(element, 'visibility', hideRemove);
});
hideRemoveElements.remove.forEach((element) => {
if (Array.isArray(element)) {
return element.forEach((singleElement) => hideRemoveEl(singleElement, 'display', hideRemove));
}
hideRemoveEl(element, 'display', hideRemove);
});
function hideRemoveEl(el, prop, hideRemove) {
// @ts-ignore
if (el.style) {
// Here we get the HTMLElement
// @ts-ignore
setPropertyToElement(el, prop, hideRemove);
}
else {
// Here we have the WebElement, with the web element we can have 2 types of selectors
// css and xpath, transform them into HTML
// This is an anti pattern, but I don't know how to do this better with XPATH selection
try {
// @ts-ignore
const selector = el.selector;
if (!visitedSelectors[selector]) {
visitedSelectors[selector] = true;
const elems = document.querySelectorAll(selector);
elems.forEach((singleEl) => setPropertyToElement(singleEl, prop, hideRemove));
}
}
catch (_e) {
// 99.99% sure that we have XPATH here
// @ts-ignore
return getElementsByXpath(el.selector).forEach((singleEl) => setPropertyToElement(singleEl, prop, hideRemove));
}
}
}
function setPropertyToElement(el, prop, hideRemove) {
const value = prop === 'visibility' ? 'hidden' : 'none';
// @ts-ignore
el.style[prop] = hideRemove ? value : '';
hideRemove ? el.style.setProperty(prop, value, 'important') : el.style.removeProperty(prop);
}
// Stupid TypeScript =)
function getElementsByXpath(xpathToExecute) {
const result = [];
const nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (let i = 0; i < nodesSnapshot.snapshotLength; i++) {
result.push(nodesSnapshot.snapshotItem(i));
}
return result;
}
}