@testplane/webdriverio
Version:
Next-gen browser and mobile automation test framework for Node.js
36 lines (35 loc) • 5.21 kB
JavaScript
// src/scripts/customElement.ts
function customElementWrapper() {
const origFn = customElements.define.bind(customElements);
customElements.define = function(name, Constructor, options) {
const origConnectedCallback = Constructor.prototype.connectedCallback;
Constructor.prototype.connectedCallback = function() {
let parentNode = this;
while (parentNode.parentNode) {
parentNode = parentNode.parentNode;
}
console.debug("[WDIO]", "newShadowRoot", this, parentNode, parentNode === document, document.documentElement);
return origConnectedCallback?.call(this);
};
const origDisconnectedCallback = Constructor.prototype.disconnectedCallback;
Constructor.prototype.disconnectedCallback = function() {
console.debug("[WDIO]", "removeShadowRoot", this);
return origDisconnectedCallback?.call(this);
};
return origFn(name, Constructor, options);
};
const origAttachShadow = Element.prototype.attachShadow;
Element.prototype.attachShadow = function(init) {
const shadowRoot = origAttachShadow.call(this, init);
let parentNode = this;
while (parentNode.parentNode) {
parentNode = parentNode.parentNode;
}
console.debug("[WDIO]", "newShadowRoot", this, parentNode, parentNode === document, document.documentElement);
return shadowRoot;
};
}
export {
customElementWrapper as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3NjcmlwdHMvY3VzdG9tRWxlbWVudC50cyJdLAogICJzb3VyY2VSb290IjogIi9Vc2Vycy9kdWRrZXZpY2gvam9iL3Byb2plY3RzL2dlbWluaS10ZXN0aW5nL3dlYmRyaXZlcmlvL3BhY2thZ2VzL3dlYmRyaXZlcmlvIiwKICAic291cmNlc0NvbnRlbnQiOiBbImludGVyZmFjZSBFbmhhbmNlZEhUTUxFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgIGNvbm5lY3RlZENhbGxiYWNrPygpOiB2b2lkO1xuICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrPygpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yIHtcbiAgICBuZXcgKC4uLnBhcmFtczogdW5rbm93bltdKTogRW5oYW5jZWRIVE1MRWxlbWVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3VzdG9tRWxlbWVudFdyYXBwZXIgKCkge1xuICAgIGNvbnN0IG9yaWdGbiA9IGN1c3RvbUVsZW1lbnRzLmRlZmluZS5iaW5kKGN1c3RvbUVsZW1lbnRzKVxuICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSA9IGZ1bmN0aW9uKG5hbWU6IHN0cmluZywgQ29uc3RydWN0b3I6IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvciwgb3B0aW9ucz86IEVsZW1lbnREZWZpbml0aW9uT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcmlnQ29ubmVjdGVkQ2FsbGJhY2sgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2tcbiAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24odGhpczogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGxldCBwYXJlbnROb2RlOiBQYXJlbnROb2RlIHwgbnVsbCA9IHRoaXNcbiAgICAgICAgICAgIHdoaWxlIChwYXJlbnROb2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbV0RJT10nLCAnbmV3U2hhZG93Um9vdCcsIHRoaXMsIHBhcmVudE5vZGUsIHBhcmVudE5vZGUgPT09IGRvY3VtZW50LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgICByZXR1cm4gb3JpZ0Nvbm5lY3RlZENhbGxiYWNrPy5jYWxsKHRoaXMpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcmlnRGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2tcbiAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24odGhpczogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tXRElPXScsICdyZW1vdmVTaGFkb3dSb290JywgdGhpcylcbiAgICAgICAgICAgIHJldHVybiBvcmlnRGlzY29ubmVjdGVkQ2FsbGJhY2s/LmNhbGwodGhpcylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3JpZ0ZuKG5hbWUsIENvbnN0cnVjdG9yLCBvcHRpb25zKVxuICAgIH1cblxuICAgIGNvbnN0IG9yaWdBdHRhY2hTaGFkb3cgPSBFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3dcbiAgICBFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3cgPSBmdW5jdGlvbiAodGhpczogSFRNTEVsZW1lbnQsIGluaXQ6IFNoYWRvd1Jvb3RJbml0KSB7XG4gICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBvcmlnQXR0YWNoU2hhZG93LmNhbGwodGhpcywgaW5pdClcbiAgICAgICAgbGV0IHBhcmVudE5vZGU6IFBhcmVudE5vZGUgfCBudWxsID0gdGhpc1xuICAgICAgICB3aGlsZSAocGFyZW50Tm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlXG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW1dESU9dJywgJ25ld1NoYWRvd1Jvb3QnLCB0aGlzLCBwYXJlbnROb2RlLCBwYXJlbnROb2RlID09PSBkb2N1bWVudCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICByZXR1cm4gc2hhZG93Um9vdFxuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFTZSxTQUFSLHVCQUF5QztBQUM1QyxRQUFNLFNBQVMsZUFBZSxPQUFPLEtBQUssY0FBYztBQUN4RCxpQkFBZSxTQUFTLFNBQVMsTUFBYyxhQUF1QyxTQUFvQztBQUN0SCxVQUFNLHdCQUF3QixZQUFZLFVBQVU7QUFDcEQsZ0JBQVksVUFBVSxvQkFBb0IsV0FBNEI7QUFDbEUsVUFBSSxhQUFnQztBQUNwQyxhQUFPLFdBQVcsWUFBWTtBQUMxQixxQkFBYSxXQUFXO0FBQUEsTUFDNUI7QUFDQSxjQUFRLE1BQU0sVUFBVSxpQkFBaUIsTUFBTSxZQUFZLGVBQWUsVUFBVSxTQUFTLGVBQWU7QUFDNUcsYUFBTyx1QkFBdUIsS0FBSyxJQUFJO0FBQUEsSUFDM0M7QUFFQSxVQUFNLDJCQUEyQixZQUFZLFVBQVU7QUFDdkQsZ0JBQVksVUFBVSx1QkFBdUIsV0FBNEI7QUFDckUsY0FBUSxNQUFNLFVBQVUsb0JBQW9CLElBQUk7QUFDaEQsYUFBTywwQkFBMEIsS0FBSyxJQUFJO0FBQUEsSUFDOUM7QUFDQSxXQUFPLE9BQU8sTUFBTSxhQUFhLE9BQU87QUFBQSxFQUM1QztBQUVBLFFBQU0sbUJBQW1CLFFBQVEsVUFBVTtBQUMzQyxVQUFRLFVBQVUsZUFBZSxTQUE2QixNQUFzQjtBQUNoRixVQUFNLGFBQWEsaUJBQWlCLEtBQUssTUFBTSxJQUFJO0FBQ25ELFFBQUksYUFBZ0M7QUFDcEMsV0FBTyxXQUFXLFlBQVk7QUFDMUIsbUJBQWEsV0FBVztBQUFBLElBQzVCO0FBQ0EsWUFBUSxNQUFNLFVBQVUsaUJBQWlCLE1BQU0sWUFBWSxlQUFlLFVBQVUsU0FBUyxlQUFlO0FBQzVHLFdBQU87QUFBQSxFQUNYO0FBQ0o7IiwKICAibmFtZXMiOiBbXQp9Cg==