@wdio/image-comparison-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +82 -0
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/assets/ios/ipadair4th.ipadair5th-bottom.png +0 -0
- package/assets/ios/ipadair4th.ipadair5th-top.png +0 -0
- package/assets/ios/ipadmini6th-bottom.png +0 -0
- package/assets/ios/ipadmini6th-top.png +0 -0
- package/assets/ios/ipadpro11-bottom.png +0 -0
- package/assets/ios/ipadpro11-top.png +0 -0
- package/assets/ios/ipadpro129-bottom.png +0 -0
- package/assets/ios/ipadpro129-top.png +0 -0
- package/assets/ios/iphone11promax-bottom.png +0 -0
- package/assets/ios/iphone11promax-top.png +0 -0
- package/assets/ios/iphone12.iphone12pro-top.png +0 -0
- package/assets/ios/iphone12.iphone12pro.iphone13.iphone13pro.iphone14-bottom.png +0 -0
- package/assets/ios/iphone12mini-top.png +0 -0
- package/assets/ios/iphone12mini.iphone13mini-bottom.png +0 -0
- package/assets/ios/iphone12promax-top.png +0 -0
- package/assets/ios/iphone12promax.iphone13promax.iphone14plus-bottom.png +0 -0
- package/assets/ios/iphone13.iphone13pro.iphone14-top.png +0 -0
- package/assets/ios/iphone13mini-top.png +0 -0
- package/assets/ios/iphone13promax.iphone14plus-top.png +0 -0
- package/assets/ios/iphone14pro-bottom.png +0 -0
- package/assets/ios/iphone14pro-top.png +0 -0
- package/assets/ios/iphone14promax-bottom.png +0 -0
- package/assets/ios/iphone14promax-top.png +0 -0
- package/assets/ios/iphone15-bottom.png +0 -0
- package/assets/ios/iphone15-top.png +0 -0
- package/assets/ios/iphonex.iphonexs.iphone11pro-bottom.png +0 -0
- package/assets/ios/iphonex.iphonexs.iphone11pro-top.png +0 -0
- package/assets/ios/iphonexr.iphone11-bottom.png +0 -0
- package/assets/ios/iphonexr.iphone11-top.png +0 -0
- package/assets/ios/iphonexsmax-bottom.png +0 -0
- package/assets/ios/iphonexsmax-top.png +0 -0
- package/dist/base.d.ts +18 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.interfaces.d.ts +200 -0
- package/dist/base.interfaces.d.ts.map +1 -0
- package/dist/base.interfaces.js +1 -0
- package/dist/base.js +58 -0
- package/dist/base.test.d.ts +2 -0
- package/dist/base.test.d.ts.map +1 -0
- package/dist/base.test.js +45 -0
- package/dist/clientSideScripts/checkMetaTag.d.ts +2 -0
- package/dist/clientSideScripts/checkMetaTag.d.ts.map +1 -0
- package/dist/clientSideScripts/checkMetaTag.js +9 -0
- package/dist/clientSideScripts/checkMetaTag.test.d.ts +2 -0
- package/dist/clientSideScripts/checkMetaTag.test.d.ts.map +1 -0
- package/dist/clientSideScripts/checkMetaTag.test.js +25 -0
- package/dist/clientSideScripts/customCss.interfaces.d.ts +8 -0
- package/dist/clientSideScripts/customCss.interfaces.d.ts.map +1 -0
- package/dist/clientSideScripts/customCss.interfaces.js +1 -0
- package/dist/clientSideScripts/drawTabbableOnCanvas.d.ts +8 -0
- package/dist/clientSideScripts/drawTabbableOnCanvas.d.ts.map +1 -0
- package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.d.ts +4 -0
- package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.d.ts.map +1 -0
- package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.js +1 -0
- package/dist/clientSideScripts/drawTabbableOnCanvas.js +275 -0
- package/dist/clientSideScripts/drawTabbableOnCanvas.test.d.ts +2 -0
- package/dist/clientSideScripts/drawTabbableOnCanvas.test.d.ts.map +1 -0
- package/dist/clientSideScripts/drawTabbableOnCanvas.test.js +251 -0
- package/dist/clientSideScripts/elementPosition.interfaces.d.ts +3 -0
- package/dist/clientSideScripts/elementPosition.interfaces.d.ts.map +1 -0
- package/dist/clientSideScripts/elementPosition.interfaces.js +1 -0
- package/dist/clientSideScripts/getBoundingClientRect.d.ts +6 -0
- package/dist/clientSideScripts/getBoundingClientRect.d.ts.map +1 -0
- package/dist/clientSideScripts/getBoundingClientRect.js +12 -0
- package/dist/clientSideScripts/getBoundingClientRect.test.d.ts +2 -0
- package/dist/clientSideScripts/getBoundingClientRect.test.d.ts.map +1 -0
- package/dist/clientSideScripts/getBoundingClientRect.test.js +28 -0
- package/dist/clientSideScripts/getDocumentScrollHeight.d.ts +5 -0
- package/dist/clientSideScripts/getDocumentScrollHeight.d.ts.map +1 -0
- package/dist/clientSideScripts/getDocumentScrollHeight.js +48 -0
- package/dist/clientSideScripts/getDocumentScrollHeight.test.d.ts +2 -0
- package/dist/clientSideScripts/getDocumentScrollHeight.test.d.ts.map +1 -0
- package/dist/clientSideScripts/getDocumentScrollHeight.test.js +30 -0
- package/dist/clientSideScripts/getElementPositionTopDom.d.ts +6 -0
- package/dist/clientSideScripts/getElementPositionTopDom.d.ts.map +1 -0
- package/dist/clientSideScripts/getElementPositionTopDom.js +11 -0
- package/dist/clientSideScripts/getElementPositionTopDom.test.d.ts +2 -0
- package/dist/clientSideScripts/getElementPositionTopDom.test.d.ts.map +1 -0
- package/dist/clientSideScripts/getElementPositionTopDom.test.js +11 -0
- package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.d.ts +14 -0
- package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.d.ts.map +1 -0
- package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.js +19 -0
- package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.d.ts +2 -0
- package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.d.ts.map +1 -0
- package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.js +52 -0
- package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.d.ts +6 -0
- package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.d.ts.map +1 -0
- package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.js +17 -0
- package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.d.ts +2 -0
- package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.d.ts.map +1 -0
- package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.js +47 -0
- package/dist/clientSideScripts/getScreenDimensions.d.ts +6 -0
- package/dist/clientSideScripts/getScreenDimensions.d.ts.map +1 -0
- package/dist/clientSideScripts/getScreenDimensions.js +104 -0
- package/dist/clientSideScripts/getScreenDimensions.test.d.ts +2 -0
- package/dist/clientSideScripts/getScreenDimensions.test.d.ts.map +1 -0
- package/dist/clientSideScripts/getScreenDimensions.test.js +161 -0
- package/dist/clientSideScripts/hideRemoveElements.d.ts +8 -0
- package/dist/clientSideScripts/hideRemoveElements.d.ts.map +1 -0
- package/dist/clientSideScripts/hideRemoveElements.js +60 -0
- package/dist/clientSideScripts/hideRemoveElements.test.d.ts +2 -0
- package/dist/clientSideScripts/hideRemoveElements.test.d.ts.map +1 -0
- package/dist/clientSideScripts/hideRemoveElements.test.js +199 -0
- package/dist/clientSideScripts/hideScrollbars.d.ts +9 -0
- package/dist/clientSideScripts/hideScrollbars.d.ts.map +1 -0
- package/dist/clientSideScripts/hideScrollbars.js +15 -0
- package/dist/clientSideScripts/hideScrollbars.test.d.ts +2 -0
- package/dist/clientSideScripts/hideScrollbars.test.d.ts.map +1 -0
- package/dist/clientSideScripts/hideScrollbars.test.js +12 -0
- package/dist/clientSideScripts/injectWebviewOverlay.d.ts +5 -0
- package/dist/clientSideScripts/injectWebviewOverlay.d.ts.map +1 -0
- package/dist/clientSideScripts/injectWebviewOverlay.js +35 -0
- package/dist/clientSideScripts/injectWebviewOverlay.test.d.ts +2 -0
- package/dist/clientSideScripts/injectWebviewOverlay.test.d.ts.map +1 -0
- package/dist/clientSideScripts/injectWebviewOverlay.test.js +74 -0
- package/dist/clientSideScripts/removeElementFromDom.d.ts +5 -0
- package/dist/clientSideScripts/removeElementFromDom.d.ts.map +1 -0
- package/dist/clientSideScripts/removeElementFromDom.js +9 -0
- package/dist/clientSideScripts/removeElementFromDom.test.d.ts +2 -0
- package/dist/clientSideScripts/removeElementFromDom.test.d.ts.map +1 -0
- package/dist/clientSideScripts/removeElementFromDom.test.js +43 -0
- package/dist/clientSideScripts/screenDimensions.interfaces.d.ts +96 -0
- package/dist/clientSideScripts/screenDimensions.interfaces.d.ts.map +1 -0
- package/dist/clientSideScripts/screenDimensions.interfaces.js +1 -0
- package/dist/clientSideScripts/scrollElementIntoView.d.ts +5 -0
- package/dist/clientSideScripts/scrollElementIntoView.d.ts.map +1 -0
- package/dist/clientSideScripts/scrollElementIntoView.js +31 -0
- package/dist/clientSideScripts/scrollElementIntoView.test.d.ts +2 -0
- package/dist/clientSideScripts/scrollElementIntoView.test.d.ts.map +1 -0
- package/dist/clientSideScripts/scrollElementIntoView.test.js +79 -0
- package/dist/clientSideScripts/scrollToPosition.d.ts +5 -0
- package/dist/clientSideScripts/scrollToPosition.d.ts.map +1 -0
- package/dist/clientSideScripts/scrollToPosition.js +25 -0
- package/dist/clientSideScripts/scrollToPosition.test.d.ts +2 -0
- package/dist/clientSideScripts/scrollToPosition.test.d.ts.map +1 -0
- package/dist/clientSideScripts/scrollToPosition.test.js +72 -0
- package/dist/clientSideScripts/setCustomCss.d.ts +6 -0
- package/dist/clientSideScripts/setCustomCss.d.ts.map +1 -0
- package/dist/clientSideScripts/setCustomCss.js +36 -0
- package/dist/clientSideScripts/setCustomCss.test.d.ts +2 -0
- package/dist/clientSideScripts/setCustomCss.test.d.ts.map +1 -0
- package/dist/clientSideScripts/setCustomCss.test.js +68 -0
- package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.d.ts +11 -0
- package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.d.ts.map +1 -0
- package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.js +1 -0
- package/dist/clientSideScripts/toggleTextTransparency.d.ts +5 -0
- package/dist/clientSideScripts/toggleTextTransparency.d.ts.map +1 -0
- package/dist/clientSideScripts/toggleTextTransparency.js +16 -0
- package/dist/clientSideScripts/toggleTextTransparency.test.d.ts +2 -0
- package/dist/clientSideScripts/toggleTextTransparency.test.d.ts.map +1 -0
- package/dist/clientSideScripts/toggleTextTransparency.test.js +35 -0
- package/dist/clientSideScripts/waitForFonts.d.ts +8 -0
- package/dist/clientSideScripts/waitForFonts.d.ts.map +1 -0
- package/dist/clientSideScripts/waitForFonts.js +20 -0
- package/dist/clientSideScripts/waitForFonts.test.d.ts +2 -0
- package/dist/clientSideScripts/waitForFonts.test.d.ts.map +1 -0
- package/dist/clientSideScripts/waitForFonts.test.js +37 -0
- package/dist/commands/check.interfaces.d.ts +35 -0
- package/dist/commands/check.interfaces.d.ts.map +1 -0
- package/dist/commands/check.interfaces.js +1 -0
- package/dist/commands/checkAppElement.d.ts +7 -0
- package/dist/commands/checkAppElement.d.ts.map +1 -0
- package/dist/commands/checkAppElement.js +44 -0
- package/dist/commands/checkAppElement.test.d.ts +2 -0
- package/dist/commands/checkAppElement.test.d.ts.map +1 -0
- package/dist/commands/checkAppElement.test.js +241 -0
- package/dist/commands/checkAppScreen.d.ts +7 -0
- package/dist/commands/checkAppScreen.d.ts.map +1 -0
- package/dist/commands/checkAppScreen.js +73 -0
- package/dist/commands/checkAppScreen.test.d.ts +2 -0
- package/dist/commands/checkAppScreen.test.d.ts.map +1 -0
- package/dist/commands/checkAppScreen.test.js +295 -0
- package/dist/commands/checkElement.d.ts +7 -0
- package/dist/commands/checkElement.d.ts.map +1 -0
- package/dist/commands/checkElement.js +10 -0
- package/dist/commands/checkElement.test.d.ts +2 -0
- package/dist/commands/checkElement.test.d.ts.map +1 -0
- package/dist/commands/checkElement.test.js +66 -0
- package/dist/commands/checkFullPageScreen.d.ts +7 -0
- package/dist/commands/checkFullPageScreen.d.ts.map +1 -0
- package/dist/commands/checkFullPageScreen.js +56 -0
- package/dist/commands/checkFullPageScreen.test.d.ts +2 -0
- package/dist/commands/checkFullPageScreen.test.d.ts.map +1 -0
- package/dist/commands/checkFullPageScreen.test.js +259 -0
- package/dist/commands/checkScreen.d.ts +7 -0
- package/dist/commands/checkScreen.d.ts.map +1 -0
- package/dist/commands/checkScreen.js +10 -0
- package/dist/commands/checkScreen.test.d.ts +2 -0
- package/dist/commands/checkScreen.test.d.ts.map +1 -0
- package/dist/commands/checkScreen.test.js +62 -0
- package/dist/commands/checkTabbablePage.d.ts +7 -0
- package/dist/commands/checkTabbablePage.d.ts.map +1 -0
- package/dist/commands/checkTabbablePage.js +28 -0
- package/dist/commands/checkTabbablePage.test.d.ts +2 -0
- package/dist/commands/checkTabbablePage.test.d.ts.map +1 -0
- package/dist/commands/checkTabbablePage.test.js +200 -0
- package/dist/commands/checkWebElement.d.ts +7 -0
- package/dist/commands/checkWebElement.d.ts.map +1 -0
- package/dist/commands/checkWebElement.js +52 -0
- package/dist/commands/checkWebElement.test.d.ts +2 -0
- package/dist/commands/checkWebElement.test.d.ts.map +1 -0
- package/dist/commands/checkWebElement.test.js +278 -0
- package/dist/commands/checkWebScreen.d.ts +7 -0
- package/dist/commands/checkWebScreen.d.ts.map +1 -0
- package/dist/commands/checkWebScreen.js +50 -0
- package/dist/commands/checkWebScreen.test.d.ts +2 -0
- package/dist/commands/checkWebScreen.test.d.ts.map +1 -0
- package/dist/commands/checkWebScreen.test.js +227 -0
- package/dist/commands/element.interfaces.d.ts +27 -0
- package/dist/commands/element.interfaces.d.ts.map +1 -0
- package/dist/commands/element.interfaces.js +1 -0
- package/dist/commands/fullPage.interfaces.d.ts +38 -0
- package/dist/commands/fullPage.interfaces.d.ts.map +1 -0
- package/dist/commands/fullPage.interfaces.js +1 -0
- package/dist/commands/save.interfaces.d.ts +27 -0
- package/dist/commands/save.interfaces.d.ts.map +1 -0
- package/dist/commands/save.interfaces.js +1 -0
- package/dist/commands/saveAppElement.d.ts +7 -0
- package/dist/commands/saveAppElement.d.ts.map +1 -0
- package/dist/commands/saveAppElement.js +30 -0
- package/dist/commands/saveAppElement.test.d.ts +2 -0
- package/dist/commands/saveAppElement.test.d.ts.map +1 -0
- package/dist/commands/saveAppElement.test.js +199 -0
- package/dist/commands/saveAppScreen.d.ts +7 -0
- package/dist/commands/saveAppScreen.d.ts.map +1 -0
- package/dist/commands/saveAppScreen.js +43 -0
- package/dist/commands/saveAppScreen.test.d.ts +2 -0
- package/dist/commands/saveAppScreen.test.d.ts.map +1 -0
- package/dist/commands/saveAppScreen.test.js +221 -0
- package/dist/commands/saveElement.d.ts +7 -0
- package/dist/commands/saveElement.d.ts.map +1 -0
- package/dist/commands/saveElement.js +10 -0
- package/dist/commands/saveElement.test.d.ts +2 -0
- package/dist/commands/saveElement.test.d.ts.map +1 -0
- package/dist/commands/saveElement.test.js +62 -0
- package/dist/commands/saveFullPageScreen.d.ts +7 -0
- package/dist/commands/saveFullPageScreen.d.ts.map +1 -0
- package/dist/commands/saveFullPageScreen.js +60 -0
- package/dist/commands/saveFullPageScreen.test.d.ts +2 -0
- package/dist/commands/saveFullPageScreen.test.d.ts.map +1 -0
- package/dist/commands/saveFullPageScreen.test.js +293 -0
- package/dist/commands/saveScreen.d.ts +7 -0
- package/dist/commands/saveScreen.d.ts.map +1 -0
- package/dist/commands/saveScreen.js +10 -0
- package/dist/commands/saveScreen.test.d.ts +2 -0
- package/dist/commands/saveScreen.test.d.ts.map +1 -0
- package/dist/commands/saveScreen.test.js +47 -0
- package/dist/commands/saveTabbablePage.d.ts +7 -0
- package/dist/commands/saveTabbablePage.d.ts.map +1 -0
- package/dist/commands/saveTabbablePage.js +20 -0
- package/dist/commands/saveTabbablePage.test.d.ts +2 -0
- package/dist/commands/saveTabbablePage.test.d.ts.map +1 -0
- package/dist/commands/saveTabbablePage.test.js +74 -0
- package/dist/commands/saveWebElement.d.ts +7 -0
- package/dist/commands/saveWebElement.d.ts.map +1 -0
- package/dist/commands/saveWebElement.js +53 -0
- package/dist/commands/saveWebElement.test.d.ts +2 -0
- package/dist/commands/saveWebElement.test.d.ts.map +1 -0
- package/dist/commands/saveWebElement.test.js +253 -0
- package/dist/commands/saveWebScreen.d.ts +7 -0
- package/dist/commands/saveWebScreen.d.ts.map +1 -0
- package/dist/commands/saveWebScreen.js +48 -0
- package/dist/commands/saveWebScreen.test.d.ts +2 -0
- package/dist/commands/saveWebScreen.test.d.ts.map +1 -0
- package/dist/commands/saveWebScreen.test.js +222 -0
- package/dist/commands/screen.interfaces.d.ts +16 -0
- package/dist/commands/screen.interfaces.d.ts.map +1 -0
- package/dist/commands/screen.interfaces.js +1 -0
- package/dist/commands/tabbable.interfaces.d.ts +29 -0
- package/dist/commands/tabbable.interfaces.d.ts.map +1 -0
- package/dist/commands/tabbable.interfaces.js +1 -0
- package/dist/helpers/afterScreenshot.d.ts +7 -0
- package/dist/helpers/afterScreenshot.d.ts.map +1 -0
- package/dist/helpers/afterScreenshot.interfaces.d.ts +46 -0
- package/dist/helpers/afterScreenshot.interfaces.d.ts.map +1 -0
- package/dist/helpers/afterScreenshot.interfaces.js +1 -0
- package/dist/helpers/afterScreenshot.js +55 -0
- package/dist/helpers/afterScreenshot.test.d.ts +2 -0
- package/dist/helpers/afterScreenshot.test.d.ts.map +1 -0
- package/dist/helpers/afterScreenshot.test.js +241 -0
- package/dist/helpers/beforeScreenshot.d.ts +6 -0
- package/dist/helpers/beforeScreenshot.d.ts.map +1 -0
- package/dist/helpers/beforeScreenshot.interfaces.d.ts +15 -0
- package/dist/helpers/beforeScreenshot.interfaces.d.ts.map +1 -0
- package/dist/helpers/beforeScreenshot.interfaces.js +1 -0
- package/dist/helpers/beforeScreenshot.js +79 -0
- package/dist/helpers/beforeScreenshot.test.d.ts +2 -0
- package/dist/helpers/beforeScreenshot.test.d.ts.map +1 -0
- package/dist/helpers/beforeScreenshot.test.js +261 -0
- package/dist/helpers/compare.interfaces.d.ts +16 -0
- package/dist/helpers/compare.interfaces.d.ts.map +1 -0
- package/dist/helpers/compare.interfaces.js +1 -0
- package/dist/helpers/constants.d.ts +108 -0
- package/dist/helpers/constants.d.ts.map +1 -0
- package/dist/helpers/constants.interfaces.d.ts +30 -0
- package/dist/helpers/constants.interfaces.d.ts.map +1 -0
- package/dist/helpers/constants.interfaces.js +11 -0
- package/dist/helpers/constants.js +436 -0
- package/dist/helpers/options.d.ts +64 -0
- package/dist/helpers/options.d.ts.map +1 -0
- package/dist/helpers/options.interfaces.d.ts +363 -0
- package/dist/helpers/options.interfaces.d.ts.map +1 -0
- package/dist/helpers/options.interfaces.js +1 -0
- package/dist/helpers/options.js +184 -0
- package/dist/helpers/options.test.d.ts +2 -0
- package/dist/helpers/options.test.d.ts.map +1 -0
- package/dist/helpers/options.test.js +428 -0
- package/dist/helpers/utils.d.ts +134 -0
- package/dist/helpers/utils.d.ts.map +1 -0
- package/dist/helpers/utils.interfaces.d.ts +254 -0
- package/dist/helpers/utils.interfaces.d.ts.map +1 -0
- package/dist/helpers/utils.interfaces.js +1 -0
- package/dist/helpers/utils.js +566 -0
- package/dist/helpers/utils.test.d.ts +2 -0
- package/dist/helpers/utils.test.d.ts.map +1 -0
- package/dist/helpers/utils.test.js +900 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/methods/compareReport.interfaces.d.ts +109 -0
- package/dist/methods/compareReport.interfaces.d.ts.map +1 -0
- package/dist/methods/compareReport.interfaces.js +1 -0
- package/dist/methods/createCompareReport.d.ts +7 -0
- package/dist/methods/createCompareReport.d.ts.map +1 -0
- package/dist/methods/createCompareReport.js +61 -0
- package/dist/methods/createCompareReport.test.d.ts +2 -0
- package/dist/methods/createCompareReport.test.d.ts.map +1 -0
- package/dist/methods/createCompareReport.test.js +236 -0
- package/dist/methods/elementPosition.d.ts +18 -0
- package/dist/methods/elementPosition.d.ts.map +1 -0
- package/dist/methods/elementPosition.interfaces.d.ts +14 -0
- package/dist/methods/elementPosition.interfaces.d.ts.map +1 -0
- package/dist/methods/elementPosition.interfaces.js +1 -0
- package/dist/methods/elementPosition.js +34 -0
- package/dist/methods/images.d.ts +69 -0
- package/dist/methods/images.d.ts.map +1 -0
- package/dist/methods/images.executeImageCompare.test.d.ts +2 -0
- package/dist/methods/images.executeImageCompare.test.d.ts.map +1 -0
- package/dist/methods/images.executeImageCompare.test.js +770 -0
- package/dist/methods/images.interfaces.d.ts +214 -0
- package/dist/methods/images.interfaces.d.ts.map +1 -0
- package/dist/methods/images.interfaces.js +1 -0
- package/dist/methods/images.js +428 -0
- package/dist/methods/images.test.d.ts +2 -0
- package/dist/methods/images.test.d.ts.map +1 -0
- package/dist/methods/images.test.js +1465 -0
- package/dist/methods/instanceData.d.ts +6 -0
- package/dist/methods/instanceData.d.ts.map +1 -0
- package/dist/methods/instanceData.interfaces.d.ts +57 -0
- package/dist/methods/instanceData.interfaces.d.ts.map +1 -0
- package/dist/methods/instanceData.interfaces.js +1 -0
- package/dist/methods/instanceData.js +42 -0
- package/dist/methods/instanceData.test.d.ts +2 -0
- package/dist/methods/instanceData.test.d.ts.map +1 -0
- package/dist/methods/instanceData.test.js +224 -0
- package/dist/methods/processDiffPixels.d.ts +59 -0
- package/dist/methods/processDiffPixels.d.ts.map +1 -0
- package/dist/methods/processDiffPixels.js +242 -0
- package/dist/methods/processDiffPixels.test.d.ts +2 -0
- package/dist/methods/processDiffPixels.test.d.ts.map +1 -0
- package/dist/methods/processDiffPixels.test.js +122 -0
- package/dist/methods/rectangles.d.ts +51 -0
- package/dist/methods/rectangles.d.ts.map +1 -0
- package/dist/methods/rectangles.interfaces.d.ts +146 -0
- package/dist/methods/rectangles.interfaces.d.ts.map +1 -0
- package/dist/methods/rectangles.interfaces.js +1 -0
- package/dist/methods/rectangles.js +266 -0
- package/dist/methods/rectangles.test.d.ts +2 -0
- package/dist/methods/rectangles.test.d.ts.map +1 -0
- package/dist/methods/rectangles.test.js +853 -0
- package/dist/methods/screenshots.d.ts +37 -0
- package/dist/methods/screenshots.d.ts.map +1 -0
- package/dist/methods/screenshots.interfaces.d.ts +203 -0
- package/dist/methods/screenshots.interfaces.d.ts.map +1 -0
- package/dist/methods/screenshots.interfaces.js +1 -0
- package/dist/methods/screenshots.js +394 -0
- package/dist/methods/screenshots.test.d.ts +2 -0
- package/dist/methods/screenshots.test.d.ts.map +1 -0
- package/dist/methods/screenshots.test.js +656 -0
- package/dist/methods/takeElementScreenshots.d.ts +3 -0
- package/dist/methods/takeElementScreenshots.d.ts.map +1 -0
- package/dist/methods/takeElementScreenshots.js +104 -0
- package/dist/methods/takeElementScreenshots.test.d.ts +2 -0
- package/dist/methods/takeElementScreenshots.test.d.ts.map +1 -0
- package/dist/methods/takeElementScreenshots.test.js +314 -0
- package/dist/methods/takeFullPageScreenshots.d.ts +3 -0
- package/dist/methods/takeFullPageScreenshots.d.ts.map +1 -0
- package/dist/methods/takeFullPageScreenshots.js +56 -0
- package/dist/methods/takeFullPageScreenshots.test.d.ts +2 -0
- package/dist/methods/takeFullPageScreenshots.test.d.ts.map +1 -0
- package/dist/methods/takeFullPageScreenshots.test.js +72 -0
- package/dist/methods/takeWebScreenshots.d.ts +3 -0
- package/dist/methods/takeWebScreenshots.d.ts.map +1 -0
- package/dist/methods/takeWebScreenshots.js +41 -0
- package/dist/methods/takeWebScreenshots.test.d.ts +2 -0
- package/dist/methods/takeWebScreenshots.test.d.ts.map +1 -0
- package/dist/methods/takeWebScreenshots.test.js +149 -0
- package/dist/mocks/image.d.ts +4 -0
- package/dist/mocks/image.d.ts.map +1 -0
- package/dist/mocks/image.js +3 -0
- package/dist/mocks/mocks.d.ts +745 -0
- package/dist/mocks/mocks.d.ts.map +1 -0
- package/dist/mocks/mocks.js +392 -0
- package/dist/resemble/compare.interfaces.d.ts +136 -0
- package/dist/resemble/compare.interfaces.d.ts.map +1 -0
- package/dist/resemble/compare.interfaces.js +1 -0
- package/dist/resemble/compareImages.d.ts +3 -0
- package/dist/resemble/compareImages.d.ts.map +1 -0
- package/dist/resemble/compareImages.js +21 -0
- package/dist/resemble/resemble.jimp.cjs +981 -0
- package/dist/resemble/resemble.jimp.d.cts +46 -0
- package/dist/resemble/resemble.jimp.d.cts.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDocumentScrollHeight.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getDocumentScrollHeight.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
import { describe, it, expect } from 'vitest';
|
|
3
|
+
import getDocumentScrollHeight from './getDocumentScrollHeight.js';
|
|
4
|
+
import { CONFIGURABLE } from '../mocks/mocks.js';
|
|
5
|
+
describe('getDocumentScrollHeight', () => {
|
|
6
|
+
it('should return the bodyScrollHeight', () => {
|
|
7
|
+
Object.defineProperty(document.documentElement, 'clientHeight', { value: 500, ...CONFIGURABLE });
|
|
8
|
+
Object.defineProperty(window, 'innerHeight', { value: 500, ...CONFIGURABLE });
|
|
9
|
+
Object.defineProperty(document.documentElement, 'scrollHeight', { value: 500, ...CONFIGURABLE });
|
|
10
|
+
Object.defineProperty(document.body, 'scrollHeight', { value: 1500, ...CONFIGURABLE });
|
|
11
|
+
expect(getDocumentScrollHeight()).toEqual(1500);
|
|
12
|
+
});
|
|
13
|
+
it('should return the scrollHeight', () => {
|
|
14
|
+
Object.defineProperty(document.documentElement, 'clientHeight', { value: 500, ...CONFIGURABLE });
|
|
15
|
+
Object.defineProperty(window, 'innerHeight', { value: 500, ...CONFIGURABLE });
|
|
16
|
+
Object.defineProperty(document.documentElement, 'scrollHeight', { value: 2250, ...CONFIGURABLE });
|
|
17
|
+
Object.defineProperty(document.body, 'scrollHeight', { value: 1500, ...CONFIGURABLE });
|
|
18
|
+
expect(getDocumentScrollHeight()).toEqual(2250);
|
|
19
|
+
});
|
|
20
|
+
it('should return the height of the largest node', () => {
|
|
21
|
+
Object.defineProperty(document.documentElement, 'clientHeight', { value: 1500, ...CONFIGURABLE });
|
|
22
|
+
Object.defineProperty(window, 'innerHeight', { value: 1500, ...CONFIGURABLE });
|
|
23
|
+
Object.defineProperty(document.documentElement, 'scrollHeight', { value: 1500, ...CONFIGURABLE });
|
|
24
|
+
Object.defineProperty(document.body, 'scrollHeight', { value: 1500, ...CONFIGURABLE });
|
|
25
|
+
document.body.innerHTML =
|
|
26
|
+
'<div>' + ' <span style="height: 200px;width: 50px"/>' + ' <div style="height: 500px;width: 50px" />' + '</div>';
|
|
27
|
+
// Some lines and the outcome can't be tested because we can't mock `scrollHeight` and `clientHeight`
|
|
28
|
+
getDocumentScrollHeight();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ElementPosition } from './elementPosition.interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get the position of the element to the top of the DOM
|
|
4
|
+
*/
|
|
5
|
+
export default function getElementPositionTopDom(element: HTMLElement): ElementPosition;
|
|
6
|
+
//# sourceMappingURL=getElementPositionTopDom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getElementPositionTopDom.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getElementPositionTopDom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEtE;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAOtF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the position of the element to the top of the DOM
|
|
3
|
+
*/
|
|
4
|
+
export default function getElementPositionTopDom(element) {
|
|
5
|
+
return {
|
|
6
|
+
height: element.offsetHeight,
|
|
7
|
+
width: element.offsetWidth,
|
|
8
|
+
x: element.offsetLeft,
|
|
9
|
+
y: element.offsetTop,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getElementPositionTopDom.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getElementPositionTopDom.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
import { describe, it } from 'vitest';
|
|
3
|
+
import getElementPositionTopDom from './getElementPositionTopDom.js';
|
|
4
|
+
describe('getElementPositionTopDom', () => {
|
|
5
|
+
it('should get the element position to the top of the Dom', () => {
|
|
6
|
+
document.body.innerHTML = '<div>' + ' <span id="username">Hello</span>' + '</div>';
|
|
7
|
+
getElementPositionTopDom(document.querySelector('#username'));
|
|
8
|
+
// I can't mock the offsetHeight, offsetWidth, offsetLeft, offsetTop with Jest, so there is no verification here, sorry :(
|
|
9
|
+
// If you know a way, please add it here ;-)
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ElementPosition } from './elementPosition.interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get the element position to the top of the screen of the device, not the top of the webview
|
|
4
|
+
* This method is used for Android native and iOS screenshots
|
|
5
|
+
*/
|
|
6
|
+
export declare function getElementPositionTopScreenNativeMobile(element: HTMLElement, { isLandscape, safeArea, screenHeight, screenWidth, sideBarWidth, statusBarAddressBarHeight, }: {
|
|
7
|
+
isLandscape: boolean;
|
|
8
|
+
safeArea: number;
|
|
9
|
+
screenHeight: number;
|
|
10
|
+
screenWidth: number;
|
|
11
|
+
sideBarWidth: number;
|
|
12
|
+
statusBarAddressBarHeight: number;
|
|
13
|
+
}): ElementPosition;
|
|
14
|
+
//# sourceMappingURL=getElementPositionTopScreenNativeMobile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getElementPositionTopScreenNativeMobile.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getElementPositionTopScreenNativeMobile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEtE;;;GAGG;AACH,wBAAgB,uCAAuC,CACnD,OAAO,EAAE,WAAW,EACpB,EACI,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,yBAAyB,GAC5B,EAAE;IACC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB,EAAE,MAAM,CAAC;CACrC,GACF,eAAe,CAgBjB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the element position to the top of the screen of the device, not the top of the webview
|
|
3
|
+
* This method is used for Android native and iOS screenshots
|
|
4
|
+
*/
|
|
5
|
+
export function getElementPositionTopScreenNativeMobile(element, { isLandscape, safeArea, screenHeight, screenWidth, sideBarWidth, statusBarAddressBarHeight, }) {
|
|
6
|
+
// Get some heights and widths
|
|
7
|
+
const { innerHeight } = window;
|
|
8
|
+
// Determine element position
|
|
9
|
+
const elementPosition = element.getBoundingClientRect();
|
|
10
|
+
const y = (screenHeight === innerHeight || screenWidth === innerHeight)
|
|
11
|
+
? elementPosition.top
|
|
12
|
+
: statusBarAddressBarHeight + elementPosition.top;
|
|
13
|
+
return {
|
|
14
|
+
height: elementPosition.height,
|
|
15
|
+
width: elementPosition.width,
|
|
16
|
+
x: elementPosition.left + (isLandscape ? safeArea : 0) + sideBarWidth,
|
|
17
|
+
y: y,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getElementPositionTopScreenNativeMobile.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getElementPositionTopScreenNativeMobile.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
3
|
+
import { IOS_DEVICES, CONFIGURABLE } from '../mocks/mocks.js';
|
|
4
|
+
import { getElementPositionTopScreenNativeMobile } from './getElementPositionTopScreenNativeMobile.js';
|
|
5
|
+
describe('getElementPositionTopScreenNativeMobile', () => {
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
Element.prototype.getBoundingClientRect = vi.fn(() => {
|
|
8
|
+
return {
|
|
9
|
+
width: 120,
|
|
10
|
+
height: 120,
|
|
11
|
+
top: 10,
|
|
12
|
+
left: 100,
|
|
13
|
+
bottom: 5,
|
|
14
|
+
right: 12,
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
document.body.innerHTML = '<div>' + ' <span id="username">Hello</span>' + '</div>';
|
|
18
|
+
});
|
|
19
|
+
it('should get the element position to the top of the screen for a mobile browser', () => {
|
|
20
|
+
Object.defineProperty(window, 'innerHeight', { value: IOS_DEVICES.IPHONE.innerHeight, ...CONFIGURABLE });
|
|
21
|
+
expect(getElementPositionTopScreenNativeMobile(document.querySelector('#username'), {
|
|
22
|
+
isLandscape: false,
|
|
23
|
+
safeArea: 0,
|
|
24
|
+
screenHeight: IOS_DEVICES.IPHONE.height,
|
|
25
|
+
screenWidth: IOS_DEVICES.IPHONE.width,
|
|
26
|
+
sideBarWidth: IOS_DEVICES.IPHONE.sideBar,
|
|
27
|
+
statusBarAddressBarHeight: 94,
|
|
28
|
+
})).toMatchSnapshot();
|
|
29
|
+
});
|
|
30
|
+
it('should get the element position to the top of the screen for an app in portrait mode', () => {
|
|
31
|
+
Object.defineProperty(window, 'innerHeight', { value: IOS_DEVICES.IPHONE.height, ...CONFIGURABLE });
|
|
32
|
+
expect(getElementPositionTopScreenNativeMobile(document.querySelector('#username'), {
|
|
33
|
+
isLandscape: false,
|
|
34
|
+
safeArea: 0,
|
|
35
|
+
screenHeight: IOS_DEVICES.IPHONE.height,
|
|
36
|
+
screenWidth: IOS_DEVICES.IPHONE.width,
|
|
37
|
+
sideBarWidth: IOS_DEVICES.IPHONE.sideBar,
|
|
38
|
+
statusBarAddressBarHeight: 94,
|
|
39
|
+
})).toMatchSnapshot();
|
|
40
|
+
});
|
|
41
|
+
it('should get the element position to the top of the screen for an app in landscape mode', () => {
|
|
42
|
+
Object.defineProperty(window, 'innerHeight', { value: IOS_DEVICES.IPHONE.width, ...CONFIGURABLE });
|
|
43
|
+
expect(getElementPositionTopScreenNativeMobile(document.querySelector('#username'), {
|
|
44
|
+
isLandscape: true,
|
|
45
|
+
safeArea: 44,
|
|
46
|
+
screenHeight: IOS_DEVICES.IPHONE.innerHeight,
|
|
47
|
+
screenWidth: IOS_DEVICES.IPHONE.width,
|
|
48
|
+
sideBarWidth: IOS_DEVICES.IPHONE.sideBar,
|
|
49
|
+
statusBarAddressBarHeight: 94,
|
|
50
|
+
})).toMatchSnapshot();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RectanglesOutput } from '../methods/rectangles.interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get the click and dimensions of the mobile webview and remove the overlay
|
|
4
|
+
*/
|
|
5
|
+
export declare function getMobileWebviewClickAndDimensions(overlaySelector: string): RectanglesOutput;
|
|
6
|
+
//# sourceMappingURL=getMobileWebviewClickAndDimensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMobileWebviewClickAndDimensions.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getMobileWebviewClickAndDimensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAE3E;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,eAAe,EAAE,MAAM,GAAE,gBAAgB,CAe3F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the click and dimensions of the mobile webview and remove the overlay
|
|
3
|
+
*/
|
|
4
|
+
export function getMobileWebviewClickAndDimensions(overlaySelector) {
|
|
5
|
+
const overlay = document.querySelector(overlaySelector);
|
|
6
|
+
const defaultValue = { y: 0, x: 0, width: 0, height: 0 };
|
|
7
|
+
if (!overlay || !overlay.dataset.icsWebviewData) {
|
|
8
|
+
return defaultValue;
|
|
9
|
+
}
|
|
10
|
+
overlay.remove();
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(overlay.dataset.icsWebviewData);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return defaultValue;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMobileWebviewClickAndDimensions.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getMobileWebviewClickAndDimensions.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { JSDOM } from 'jsdom';
|
|
3
|
+
import { getMobileWebviewClickAndDimensions } from './getMobileWebviewClickAndDimensions.js';
|
|
4
|
+
describe('getMobileWebviewClickAndDimensions', () => {
|
|
5
|
+
const selector = '[data-test="ics-overlay"]';
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>');
|
|
8
|
+
global.document = dom.window.document;
|
|
9
|
+
global.window = dom.window;
|
|
10
|
+
});
|
|
11
|
+
it('should return default values when overlay is not found', () => {
|
|
12
|
+
expect(getMobileWebviewClickAndDimensions(selector)).toEqual({
|
|
13
|
+
x: 0,
|
|
14
|
+
y: 0,
|
|
15
|
+
width: 0,
|
|
16
|
+
height: 0,
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
it('should return default values when data attribute is missing', () => {
|
|
20
|
+
const el = document.createElement('div');
|
|
21
|
+
el.setAttribute('data-test', 'ics-overlay');
|
|
22
|
+
document.body.appendChild(el);
|
|
23
|
+
expect(getMobileWebviewClickAndDimensions(selector)).toEqual({
|
|
24
|
+
x: 0,
|
|
25
|
+
y: 0,
|
|
26
|
+
width: 0,
|
|
27
|
+
height: 0,
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
it('should return parsed data from data attribute and remove element', () => {
|
|
31
|
+
const el = document.createElement('div');
|
|
32
|
+
el.setAttribute('data-test', 'ics-overlay');
|
|
33
|
+
el.dataset.icsWebviewData = JSON.stringify({ x: 10, y: 20, width: 100, height: 200 });
|
|
34
|
+
document.body.appendChild(el);
|
|
35
|
+
const result = getMobileWebviewClickAndDimensions(selector);
|
|
36
|
+
expect(result).toEqual({ x: 10, y: 20, width: 100, height: 200 });
|
|
37
|
+
expect(document.querySelector(selector)).toBeNull();
|
|
38
|
+
});
|
|
39
|
+
it('should return default values if JSON parsing fails', () => {
|
|
40
|
+
const el = document.createElement('div');
|
|
41
|
+
el.setAttribute('data-test', 'ics-overlay');
|
|
42
|
+
el.dataset.icsWebviewData = '{not:valid:json';
|
|
43
|
+
document.body.appendChild(el);
|
|
44
|
+
const result = getMobileWebviewClickAndDimensions(selector);
|
|
45
|
+
expect(result).toEqual({ x: 0, y: 0, width: 0, height: 0 });
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getScreenDimensions.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getScreenDimensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAExE;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB,CAwG/E"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get all the screen dimensions
|
|
3
|
+
*/
|
|
4
|
+
export default function getScreenDimensions(isMobile) {
|
|
5
|
+
// We need to determine if the screen is emulated, because that would return different values
|
|
6
|
+
const width = window.innerWidth;
|
|
7
|
+
const height = window.innerHeight;
|
|
8
|
+
const dpr = window.devicePixelRatio || 1;
|
|
9
|
+
const minEdge = Math.min(width, height);
|
|
10
|
+
const maxEdge = Math.max(width, height);
|
|
11
|
+
const isLikelyEmulated = !isMobile && // Only check for emulated on desktop
|
|
12
|
+
dpr >= 2 && // High-DPI signal
|
|
13
|
+
minEdge <= 800 && // Catch phones/tablets in portrait/landscape
|
|
14
|
+
maxEdge <= 1280 && // Conservative max for emulated tablet sizes
|
|
15
|
+
width > 0 && height > 0; // Sanity check
|
|
16
|
+
// Other checks
|
|
17
|
+
const body = document.body;
|
|
18
|
+
const html = document.documentElement;
|
|
19
|
+
const bodyDimensions = {
|
|
20
|
+
// On mobile & desktop: Total scrollable height of the body element, including content not visible on screen
|
|
21
|
+
scrollHeight: !body ? 0 : body.scrollHeight,
|
|
22
|
+
// On mobile & desktop: Height of body element including padding but not margin
|
|
23
|
+
offsetHeight: !body ? 0 : body.offsetHeight,
|
|
24
|
+
};
|
|
25
|
+
const htmlDimensions = {
|
|
26
|
+
/** On mobile & desktop: Viewport height excluding scrollbars */
|
|
27
|
+
clientHeight: !html ? 0 : html.clientHeight,
|
|
28
|
+
/** On mobile & desktop: Viewport width excluding scrollbars */
|
|
29
|
+
clientWidth: !html ? 0 : html.clientWidth,
|
|
30
|
+
/** On mobile & desktop: Total scrollable height including overflow */
|
|
31
|
+
scrollHeight: !html ? 0 : html.scrollHeight,
|
|
32
|
+
/** On mobile & desktop: Total scrollable width including overflow */
|
|
33
|
+
scrollWidth: !html ? 0 : html.scrollWidth,
|
|
34
|
+
/** On mobile & desktop: Height including padding and border */
|
|
35
|
+
offsetHeight: !html ? 0 : html.offsetHeight,
|
|
36
|
+
};
|
|
37
|
+
const windowDimensions = {
|
|
38
|
+
/**
|
|
39
|
+
* Mobile: Viewport width (changes with zoom)
|
|
40
|
+
* Desktop: Viewport width including scrollbars
|
|
41
|
+
*/
|
|
42
|
+
innerWidth: window.innerWidth,
|
|
43
|
+
/**
|
|
44
|
+
* Mobile: Viewport height (changes with zoom)
|
|
45
|
+
* Desktop: Viewport height including scrollbars
|
|
46
|
+
*/
|
|
47
|
+
innerHeight: window.innerHeight,
|
|
48
|
+
/**
|
|
49
|
+
* Mobile: True if device is in landscape orientation
|
|
50
|
+
* Desktop: Based on viewport aspect ratio
|
|
51
|
+
*/
|
|
52
|
+
isLandscape: window.matchMedia('(orientation: landscape)').matches,
|
|
53
|
+
/**
|
|
54
|
+
* Mobile: Full browser height including UI elements
|
|
55
|
+
* Desktop: Browser window height including toolbars/status bar
|
|
56
|
+
* Emulated: It will be the same as window.innerHeight
|
|
57
|
+
*/
|
|
58
|
+
outerHeight: isLikelyEmulated && window.outerHeight > 0 ?
|
|
59
|
+
window.innerHeight :
|
|
60
|
+
window.outerHeight === 0 ?
|
|
61
|
+
htmlDimensions.clientHeight :
|
|
62
|
+
window.outerHeight,
|
|
63
|
+
/**
|
|
64
|
+
* Mobile: Full browser width
|
|
65
|
+
* Desktop: Browser window width
|
|
66
|
+
* Emulated: It will be the same as window.innerWidth
|
|
67
|
+
*/
|
|
68
|
+
outerWidth: isLikelyEmulated && window.outerWidth > 0 ?
|
|
69
|
+
window.innerWidth :
|
|
70
|
+
window.outerWidth === 0 ?
|
|
71
|
+
htmlDimensions.clientWidth :
|
|
72
|
+
window.outerWidth,
|
|
73
|
+
/**
|
|
74
|
+
* Mobile: Physical pixel ratio (typically >1 for high DPI)
|
|
75
|
+
* Desktop: Usually 1, or 2 for high DPI displays
|
|
76
|
+
*/
|
|
77
|
+
devicePixelRatio: dpr,
|
|
78
|
+
/**
|
|
79
|
+
* Mobile: Always false
|
|
80
|
+
* Desktop: Always false
|
|
81
|
+
* Emulated: Always true
|
|
82
|
+
*/
|
|
83
|
+
isEmulated: isLikelyEmulated,
|
|
84
|
+
/**
|
|
85
|
+
* Mobile: Physical screen width in CSS pixels
|
|
86
|
+
* Desktop: Monitor width in pixels
|
|
87
|
+
* Emulated: It will be the same as window.innerWidth
|
|
88
|
+
*/
|
|
89
|
+
screenWidth: isLikelyEmulated ? window.innerWidth : window.screen.width,
|
|
90
|
+
/**
|
|
91
|
+
* Mobile: Physical screen height in CSS pixels
|
|
92
|
+
* Desktop: Monitor height in pixels
|
|
93
|
+
* Emulated: It will be the same as window.innerHeight
|
|
94
|
+
*/
|
|
95
|
+
screenHeight: isLikelyEmulated ? window.innerHeight : window.screen.height,
|
|
96
|
+
};
|
|
97
|
+
return {
|
|
98
|
+
dimensions: {
|
|
99
|
+
body: bodyDimensions,
|
|
100
|
+
html: htmlDimensions,
|
|
101
|
+
window: windowDimensions,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getScreenDimensions.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getScreenDimensions.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
3
|
+
import { CONFIGURABLE } from '../mocks/mocks.js';
|
|
4
|
+
import getScreenDimensions from './getScreenDimensions.js';
|
|
5
|
+
describe('getScreenDimensions', () => {
|
|
6
|
+
it('should get the needed screen dimensions for a real device', () => {
|
|
7
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
8
|
+
value: vi.fn().mockImplementation(() => ({
|
|
9
|
+
matches: true,
|
|
10
|
+
})),
|
|
11
|
+
...CONFIGURABLE,
|
|
12
|
+
});
|
|
13
|
+
expect(getScreenDimensions(true)).toMatchSnapshot();
|
|
14
|
+
});
|
|
15
|
+
it('should get the needed screen dimensions', () => {
|
|
16
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
17
|
+
value: vi.fn().mockImplementation(() => ({
|
|
18
|
+
matches: true,
|
|
19
|
+
})),
|
|
20
|
+
...CONFIGURABLE,
|
|
21
|
+
});
|
|
22
|
+
expect(getScreenDimensions(false)).toMatchSnapshot();
|
|
23
|
+
});
|
|
24
|
+
it('should get the needed screen dimensions if the outerHeight and outerWidth are set to 0', () => {
|
|
25
|
+
Object.defineProperty(window, 'outerHeight', { value: 0 });
|
|
26
|
+
Object.defineProperty(window, 'outerWidth', { value: 0 });
|
|
27
|
+
Object.defineProperty(document.documentElement, 'clientHeight', { value: 1234 });
|
|
28
|
+
Object.defineProperty(document.documentElement, 'clientWidth', { value: 4321 });
|
|
29
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
30
|
+
value: vi.fn().mockImplementation(() => ({
|
|
31
|
+
matches: false,
|
|
32
|
+
})),
|
|
33
|
+
...CONFIGURABLE,
|
|
34
|
+
});
|
|
35
|
+
expect(getScreenDimensions(false)).toMatchSnapshot();
|
|
36
|
+
});
|
|
37
|
+
it('should return zeroed dimensions if the document attributes are null', () => {
|
|
38
|
+
Object.defineProperty(document, 'body', { value: null });
|
|
39
|
+
Object.defineProperty(document, 'documentElement', { value: null });
|
|
40
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
41
|
+
value: vi.fn().mockImplementation(() => ({
|
|
42
|
+
matches: false,
|
|
43
|
+
})),
|
|
44
|
+
...CONFIGURABLE,
|
|
45
|
+
});
|
|
46
|
+
expect(getScreenDimensions(false)).toMatchSnapshot();
|
|
47
|
+
});
|
|
48
|
+
it('should detect mobile emulation and return emulated dimensions', () => {
|
|
49
|
+
const mockScreen = {
|
|
50
|
+
width: 375,
|
|
51
|
+
height: 667
|
|
52
|
+
};
|
|
53
|
+
const originalScreen = window.screen;
|
|
54
|
+
Object.defineProperty(window, 'screen', {
|
|
55
|
+
value: mockScreen,
|
|
56
|
+
configurable: true,
|
|
57
|
+
writable: true
|
|
58
|
+
});
|
|
59
|
+
Object.defineProperty(window, 'devicePixelRatio', { value: 3, configurable: true });
|
|
60
|
+
Object.defineProperty(window, 'innerWidth', { value: 375, configurable: true });
|
|
61
|
+
Object.defineProperty(window, 'innerHeight', { value: 667, configurable: true });
|
|
62
|
+
Object.defineProperty(window, 'outerWidth', { value: 375, configurable: true });
|
|
63
|
+
Object.defineProperty(window, 'outerHeight', { value: 667, configurable: true });
|
|
64
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
65
|
+
value: vi.fn().mockImplementation(() => ({
|
|
66
|
+
matches: false,
|
|
67
|
+
})),
|
|
68
|
+
...CONFIGURABLE,
|
|
69
|
+
});
|
|
70
|
+
const dimensions = getScreenDimensions(false);
|
|
71
|
+
Object.defineProperty(window, 'screen', {
|
|
72
|
+
value: originalScreen,
|
|
73
|
+
configurable: true,
|
|
74
|
+
writable: true
|
|
75
|
+
});
|
|
76
|
+
expect(dimensions.dimensions.window.screenWidth).toBe(375);
|
|
77
|
+
expect(dimensions.dimensions.window.screenHeight).toBe(667);
|
|
78
|
+
expect(dimensions.dimensions.window.outerWidth).toBe(375);
|
|
79
|
+
expect(dimensions.dimensions.window.outerHeight).toBe(667);
|
|
80
|
+
expect(dimensions.dimensions.window.devicePixelRatio).toBe(3);
|
|
81
|
+
});
|
|
82
|
+
it('should handle desktop (non-emulated) dimensions correctly', () => {
|
|
83
|
+
const mockScreen = {
|
|
84
|
+
width: 1920,
|
|
85
|
+
height: 1080
|
|
86
|
+
};
|
|
87
|
+
const originalScreen = window.screen;
|
|
88
|
+
Object.defineProperty(window, 'screen', {
|
|
89
|
+
value: mockScreen,
|
|
90
|
+
configurable: true,
|
|
91
|
+
writable: true
|
|
92
|
+
});
|
|
93
|
+
Object.defineProperty(window, 'devicePixelRatio', { value: 1, configurable: true });
|
|
94
|
+
Object.defineProperty(window, 'innerWidth', { value: 1440, configurable: true });
|
|
95
|
+
Object.defineProperty(window, 'innerHeight', { value: 900, configurable: true });
|
|
96
|
+
Object.defineProperty(window, 'outerWidth', { value: 1440, configurable: true });
|
|
97
|
+
Object.defineProperty(window, 'outerHeight', { value: 900, configurable: true });
|
|
98
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
99
|
+
value: vi.fn().mockImplementation(() => ({
|
|
100
|
+
matches: true,
|
|
101
|
+
})),
|
|
102
|
+
...CONFIGURABLE,
|
|
103
|
+
});
|
|
104
|
+
const dimensions = getScreenDimensions(false);
|
|
105
|
+
Object.defineProperty(window, 'screen', {
|
|
106
|
+
value: originalScreen,
|
|
107
|
+
configurable: true,
|
|
108
|
+
writable: true
|
|
109
|
+
});
|
|
110
|
+
expect(dimensions.dimensions.window.screenWidth).toBe(1920);
|
|
111
|
+
expect(dimensions.dimensions.window.screenHeight).toBe(1080);
|
|
112
|
+
expect(dimensions.dimensions.window.outerWidth).toBe(1440);
|
|
113
|
+
expect(dimensions.dimensions.window.outerHeight).toBe(900);
|
|
114
|
+
expect(dimensions.dimensions.window.devicePixelRatio).toBe(1);
|
|
115
|
+
});
|
|
116
|
+
it('should handle high DPI desktop displays', () => {
|
|
117
|
+
const mockScreen = {
|
|
118
|
+
width: 2880,
|
|
119
|
+
height: 1800
|
|
120
|
+
};
|
|
121
|
+
const originalScreen = window.screen;
|
|
122
|
+
Object.defineProperty(window, 'screen', {
|
|
123
|
+
value: mockScreen,
|
|
124
|
+
configurable: true,
|
|
125
|
+
writable: true
|
|
126
|
+
});
|
|
127
|
+
Object.defineProperty(window, 'devicePixelRatio', { value: 2, configurable: true });
|
|
128
|
+
Object.defineProperty(window, 'innerWidth', { value: 1440, configurable: true });
|
|
129
|
+
Object.defineProperty(window, 'innerHeight', { value: 900, configurable: true });
|
|
130
|
+
Object.defineProperty(window, 'outerWidth', { value: 1440, configurable: true });
|
|
131
|
+
Object.defineProperty(window, 'outerHeight', { value: 900, configurable: true });
|
|
132
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
133
|
+
value: vi.fn().mockImplementation(() => ({
|
|
134
|
+
matches: true,
|
|
135
|
+
})),
|
|
136
|
+
...CONFIGURABLE,
|
|
137
|
+
});
|
|
138
|
+
const dimensions = getScreenDimensions(false);
|
|
139
|
+
Object.defineProperty(window, 'screen', {
|
|
140
|
+
value: originalScreen,
|
|
141
|
+
configurable: true,
|
|
142
|
+
writable: true
|
|
143
|
+
});
|
|
144
|
+
expect(dimensions.dimensions.window.devicePixelRatio).toBe(2);
|
|
145
|
+
expect(dimensions.dimensions.window.screenWidth).toBe(2880);
|
|
146
|
+
expect(dimensions.dimensions.window.screenHeight).toBe(1800);
|
|
147
|
+
});
|
|
148
|
+
it('should handle zero devicePixelRatio', () => {
|
|
149
|
+
Object.defineProperty(window, 'devicePixelRatio', { value: 0, configurable: true });
|
|
150
|
+
Object.defineProperty(window, 'innerWidth', { value: 1920, configurable: true });
|
|
151
|
+
Object.defineProperty(window, 'innerHeight', { value: 1080, configurable: true });
|
|
152
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
153
|
+
value: vi.fn().mockImplementation(() => ({
|
|
154
|
+
matches: true,
|
|
155
|
+
})),
|
|
156
|
+
...CONFIGURABLE,
|
|
157
|
+
});
|
|
158
|
+
const dimensions = getScreenDimensions(false);
|
|
159
|
+
expect(dimensions.dimensions.window.devicePixelRatio).toBe(1);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hide or remove elements on the page
|
|
3
|
+
*/
|
|
4
|
+
export default function hideRemoveElements(hideRemoveElements: {
|
|
5
|
+
hide: (HTMLElement | HTMLElement[])[];
|
|
6
|
+
remove: (HTMLElement | HTMLElement[])[];
|
|
7
|
+
}, hideRemove: boolean): void;
|
|
8
|
+
//# sourceMappingURL=hideRemoveElements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hideRemoveElements.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/hideRemoveElements.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACtC,kBAAkB,EAAE;IAChB,IAAI,EAAE,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,EAAE,CAAC;IACtC,MAAM,EAAE,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,EAAE,CAAC;CAC3C,EACD,UAAU,EAAE,OAAO,QAgEtB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hide or remove elements on the page
|
|
3
|
+
*/
|
|
4
|
+
export default function hideRemoveElements(hideRemoveElements, hideRemove) {
|
|
5
|
+
const visitedSelectors = {};
|
|
6
|
+
hideRemoveElements.hide.forEach((element) => {
|
|
7
|
+
if (Array.isArray(element)) {
|
|
8
|
+
return element.forEach((singleElement) => hideRemoveEl(singleElement, 'visibility', hideRemove));
|
|
9
|
+
}
|
|
10
|
+
hideRemoveEl(element, 'visibility', hideRemove);
|
|
11
|
+
});
|
|
12
|
+
hideRemoveElements.remove.forEach((element) => {
|
|
13
|
+
if (Array.isArray(element)) {
|
|
14
|
+
return element.forEach((singleElement) => hideRemoveEl(singleElement, 'display', hideRemove));
|
|
15
|
+
}
|
|
16
|
+
hideRemoveEl(element, 'display', hideRemove);
|
|
17
|
+
});
|
|
18
|
+
function hideRemoveEl(el, prop, hideRemove) {
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
if (el.style) {
|
|
21
|
+
// Here we get the HTMLElement
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
setPropertyToElement(el, prop, hideRemove);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Here we have the WebElement, with the web element we can have 2 types of selectors
|
|
27
|
+
// css and xpath, transform them into HTML
|
|
28
|
+
// This is an anti pattern, but I don't know how to do this better with XPATH selection
|
|
29
|
+
try {
|
|
30
|
+
// @ts-ignore
|
|
31
|
+
const selector = el.selector;
|
|
32
|
+
if (!visitedSelectors[selector]) {
|
|
33
|
+
visitedSelectors[selector] = true;
|
|
34
|
+
const elems = document.querySelectorAll(selector);
|
|
35
|
+
elems.forEach((singleEl) => setPropertyToElement(singleEl, prop, hideRemove));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (_e) {
|
|
39
|
+
// 99.99% sure that we have XPATH here
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
return getElementsByXpath(el.selector).forEach((singleEl) => setPropertyToElement(singleEl, prop, hideRemove));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function setPropertyToElement(el, prop, hideRemove) {
|
|
46
|
+
const value = prop === 'visibility' ? 'hidden' : 'none';
|
|
47
|
+
// @ts-ignore
|
|
48
|
+
el.style[prop] = hideRemove ? value : '';
|
|
49
|
+
hideRemove ? el.style.setProperty(prop, value, 'important') : el.style.removeProperty(prop);
|
|
50
|
+
}
|
|
51
|
+
// Stupid TypeScript =)
|
|
52
|
+
function getElementsByXpath(xpathToExecute) {
|
|
53
|
+
const result = [];
|
|
54
|
+
const nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
|
|
55
|
+
for (let i = 0; i < nodesSnapshot.snapshotLength; i++) {
|
|
56
|
+
result.push(nodesSnapshot.snapshotItem(i));
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hideRemoveElements.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/hideRemoveElements.test.ts"],"names":[],"mappings":""}
|