@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,656 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import logger from '@wdio/logger';
|
|
4
|
+
import { getDesktopFullPageScreenshotsData, getAndroidChromeDriverFullPageScreenshotsData, logHiddenRemovedError, takeBase64BiDiScreenshot, takeWebElementScreenshot, getMobileFullPageNativeWebScreenshotsData } from './screenshots.js';
|
|
5
|
+
import { MEDIUM_IMAGE_STRING, SMALL_IMAGE_STRING } from '../mocks/image.js';
|
|
6
|
+
import { DEVICE_RECTANGLES } from '../helpers/constants.js';
|
|
7
|
+
import * as rectanglesModule from './rectangles.js';
|
|
8
|
+
import * as utilsModule from '../helpers/utils.js';
|
|
9
|
+
const log = logger('test');
|
|
10
|
+
vi.mock('@wdio/logger', () => import(join(process.cwd(), '__mocks__', '@wdio/logger')));
|
|
11
|
+
vi.mock('./rectangles.js', () => ({
|
|
12
|
+
determineElementRectangles: vi.fn()
|
|
13
|
+
}));
|
|
14
|
+
vi.mock('../helpers/utils.js', async () => {
|
|
15
|
+
const actual = await vi.importActual('../helpers/utils.js');
|
|
16
|
+
return {
|
|
17
|
+
...actual,
|
|
18
|
+
getBase64ScreenshotSize: vi.fn(),
|
|
19
|
+
waitFor: vi.fn(),
|
|
20
|
+
calculateDprData: vi.fn()
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
vi.mock('../clientSideScripts/scrollToPosition.js', () => ({
|
|
24
|
+
default: vi.fn()
|
|
25
|
+
}));
|
|
26
|
+
vi.mock('../clientSideScripts/getDocumentScrollHeight.js', () => ({
|
|
27
|
+
default: vi.fn()
|
|
28
|
+
}));
|
|
29
|
+
vi.mock('../clientSideScripts/hideRemoveElements.js', () => ({
|
|
30
|
+
default: vi.fn()
|
|
31
|
+
}));
|
|
32
|
+
describe('screenshots', () => {
|
|
33
|
+
const createMockBrowserInstance = ({ takeScreenshot = SMALL_IMAGE_STRING, takeElementScreenshot = SMALL_IMAGE_STRING } = {}) => {
|
|
34
|
+
return {
|
|
35
|
+
takeScreenshot: vi.fn().mockResolvedValue(takeScreenshot),
|
|
36
|
+
takeElementScreenshot: vi.fn().mockResolvedValue(takeElementScreenshot),
|
|
37
|
+
getWindowHandle: vi.fn().mockResolvedValue('window-handle-123'),
|
|
38
|
+
browsingContextCaptureScreenshot: vi.fn().mockResolvedValue({ data: takeScreenshot }),
|
|
39
|
+
execute: vi.fn().mockResolvedValue(1000)
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
const createMockElement = () => {
|
|
43
|
+
return {
|
|
44
|
+
elementId: 'element-123'
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
let logWarnSpy;
|
|
48
|
+
describe('getMobileFullPageNativeWebScreenshotsData', () => {
|
|
49
|
+
const createMobileOptions = (overrides = {}) => ({
|
|
50
|
+
addressBarShadowPadding: 10,
|
|
51
|
+
devicePixelRatio: 2,
|
|
52
|
+
deviceRectangles: {
|
|
53
|
+
viewport: { x: 0, y: 100, width: 750, height: 1334 },
|
|
54
|
+
bottomBar: { x: 0, y: 1434, width: 750, height: 100 },
|
|
55
|
+
homeBar: { x: 0, y: 1534, width: 750, height: 34 },
|
|
56
|
+
leftSidePadding: { x: 0, y: 0, width: 0, height: 0 },
|
|
57
|
+
rightSidePadding: { x: 0, y: 0, width: 0, height: 0 },
|
|
58
|
+
statusBarAndAddressBar: { x: 0, y: 0, width: 750, height: 100 },
|
|
59
|
+
statusBar: { x: 0, y: 0, width: 750, height: 50 },
|
|
60
|
+
screenSize: { width: 750, height: 1668 }
|
|
61
|
+
},
|
|
62
|
+
fullPageScrollTimeout: 1000,
|
|
63
|
+
hideAfterFirstScroll: [],
|
|
64
|
+
isAndroid: false,
|
|
65
|
+
isIOS: true,
|
|
66
|
+
isLandscape: false,
|
|
67
|
+
innerHeight: 667,
|
|
68
|
+
toolBarShadowPadding: 5,
|
|
69
|
+
screenWidth: 375,
|
|
70
|
+
...overrides
|
|
71
|
+
});
|
|
72
|
+
beforeEach(() => {
|
|
73
|
+
logWarnSpy = vi.spyOn(log, 'warn');
|
|
74
|
+
vi.mocked(utilsModule.waitFor).mockResolvedValue(undefined);
|
|
75
|
+
vi.mocked(utilsModule.calculateDprData).mockImplementation((data) => data);
|
|
76
|
+
});
|
|
77
|
+
afterEach(() => {
|
|
78
|
+
vi.clearAllMocks();
|
|
79
|
+
logWarnSpy.mockRestore();
|
|
80
|
+
});
|
|
81
|
+
it('should take single screenshot when content fits in viewport (iOS)', async () => {
|
|
82
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
83
|
+
mockBrowserInstance.execute = vi.fn()
|
|
84
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition
|
|
85
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
86
|
+
.mockResolvedValueOnce(652) // getDocumentScrollHeight (effective viewport height)
|
|
87
|
+
.mockResolvedValueOnce(undefined); // hideScrollBars
|
|
88
|
+
const options = createMobileOptions(); // iOS device by default
|
|
89
|
+
const result = await getMobileFullPageNativeWebScreenshotsData(mockBrowserInstance, options);
|
|
90
|
+
expect(result).toMatchSnapshot();
|
|
91
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalledTimes(1);
|
|
92
|
+
expect(result.data).toHaveLength(1);
|
|
93
|
+
});
|
|
94
|
+
it('should take multiple screenshots when content exceeds viewport (Android)', async () => {
|
|
95
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
96
|
+
mockBrowserInstance.execute = vi.fn()
|
|
97
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0 (i=0)
|
|
98
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars true
|
|
99
|
+
.mockResolvedValueOnce(1304) // getDocumentScrollHeight (2x effectiveViewportHeight)
|
|
100
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars false
|
|
101
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 652 (i=1)
|
|
102
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars true
|
|
103
|
+
.mockResolvedValueOnce(1304) // getDocumentScrollHeight
|
|
104
|
+
.mockResolvedValueOnce(undefined); // hideScrollBars false
|
|
105
|
+
const options = createMobileOptions({ isAndroid: true });
|
|
106
|
+
const result = await getMobileFullPageNativeWebScreenshotsData(mockBrowserInstance, options);
|
|
107
|
+
expect(result).toMatchSnapshot();
|
|
108
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalledTimes(2);
|
|
109
|
+
expect(result.data).toHaveLength(2);
|
|
110
|
+
});
|
|
111
|
+
it('should handle landscape mode with rotation detection', async () => {
|
|
112
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
113
|
+
mockBrowserInstance.execute = vi.fn()
|
|
114
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition
|
|
115
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
116
|
+
.mockResolvedValueOnce(652) // getDocumentScrollHeight
|
|
117
|
+
.mockResolvedValueOnce(undefined); // hideScrollBars
|
|
118
|
+
const options = createMobileOptions({
|
|
119
|
+
isLandscape: true,
|
|
120
|
+
deviceRectangles: {
|
|
121
|
+
viewport: { x: 0, y: 100, width: 1334, height: 750 },
|
|
122
|
+
bottomBar: { x: 0, y: 850, width: 1334, height: 100 },
|
|
123
|
+
homeBar: { x: 0, y: 950, width: 1334, height: 34 },
|
|
124
|
+
leftSidePadding: { x: 0, y: 0, width: 0, height: 0 },
|
|
125
|
+
rightSidePadding: { x: 0, y: 0, width: 0, height: 0 },
|
|
126
|
+
statusBarAndAddressBar: { x: 0, y: 0, width: 1334, height: 100 },
|
|
127
|
+
statusBar: { x: 0, y: 0, width: 1334, height: 50 },
|
|
128
|
+
screenSize: { width: 1334, height: 984 }
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
const result = await getMobileFullPageNativeWebScreenshotsData(mockBrowserInstance, options);
|
|
132
|
+
expect(result).toMatchSnapshot();
|
|
133
|
+
expect(result.data).toHaveLength(1);
|
|
134
|
+
});
|
|
135
|
+
it('should hide elements after first scroll when hideAfterFirstScroll is provided', async () => {
|
|
136
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
137
|
+
mockBrowserInstance.execute = vi.fn()
|
|
138
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0 (i=0)
|
|
139
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars true
|
|
140
|
+
.mockResolvedValueOnce(2638) // getDocumentScrollHeight (2x effectiveViewportHeight to trigger scroll)
|
|
141
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars false
|
|
142
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 1319 (i=1)
|
|
143
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars true
|
|
144
|
+
.mockResolvedValueOnce(undefined) // hideRemoveElements (i=1, hide elements)
|
|
145
|
+
.mockResolvedValueOnce(2638) // getDocumentScrollHeight
|
|
146
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars false
|
|
147
|
+
.mockResolvedValueOnce(undefined); // hideRemoveElements (restore at end)
|
|
148
|
+
const mockElements = [{ tagName: 'div' }];
|
|
149
|
+
const options = createMobileOptions({ hideAfterFirstScroll: [mockElements] });
|
|
150
|
+
const result = await getMobileFullPageNativeWebScreenshotsData(mockBrowserInstance, options);
|
|
151
|
+
expect(result).toMatchSnapshot();
|
|
152
|
+
const executeCalls = vi.mocked(mockBrowserInstance.execute).mock.calls;
|
|
153
|
+
const hideElementsCalls = executeCalls.filter(call => call.length === 3 &&
|
|
154
|
+
typeof call[1] === 'object' &&
|
|
155
|
+
call[1] &&
|
|
156
|
+
typeof call[1] === 'object' &&
|
|
157
|
+
'hide' in call[1] &&
|
|
158
|
+
Array.isArray(call[1].hide) &&
|
|
159
|
+
'remove' in call[1] &&
|
|
160
|
+
Array.isArray(call[1].remove));
|
|
161
|
+
expect(hideElementsCalls).toHaveLength(2);
|
|
162
|
+
expect(hideElementsCalls[0][2]).toBe(true);
|
|
163
|
+
expect(hideElementsCalls[1][2]).toBe(false);
|
|
164
|
+
});
|
|
165
|
+
it('should handle error when hiding elements fails', async () => {
|
|
166
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
167
|
+
const executeError = new Error('Element not found');
|
|
168
|
+
mockBrowserInstance.execute = vi.fn()
|
|
169
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0 (i=0)
|
|
170
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars true
|
|
171
|
+
.mockResolvedValueOnce(2638) // getDocumentScrollHeight (2x effectiveViewportHeight)
|
|
172
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars false
|
|
173
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 1319 (i=1)
|
|
174
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars true
|
|
175
|
+
.mockRejectedValueOnce(executeError) // hideRemoveElements fails
|
|
176
|
+
.mockResolvedValueOnce(2638) // getDocumentScrollHeight
|
|
177
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars false
|
|
178
|
+
.mockRejectedValueOnce(executeError); // hideRemoveElements restore fails
|
|
179
|
+
const mockElements = [{ tagName: 'div' }];
|
|
180
|
+
const options = createMobileOptions({ hideAfterFirstScroll: [mockElements] });
|
|
181
|
+
const result = await getMobileFullPageNativeWebScreenshotsData(mockBrowserInstance, options);
|
|
182
|
+
expect(result).toBeDefined();
|
|
183
|
+
expect(result.data).toHaveLength(2);
|
|
184
|
+
expect(logWarnSpy).toHaveBeenCalledTimes(2);
|
|
185
|
+
});
|
|
186
|
+
it('should throw error when negative scrollY is detected', async () => {
|
|
187
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
188
|
+
const options = createMobileOptions({
|
|
189
|
+
deviceRectangles: {
|
|
190
|
+
viewport: { x: 0, y: 100, width: 750, height: 50 },
|
|
191
|
+
bottomBar: { x: 0, y: 200, width: 750, height: 0 },
|
|
192
|
+
homeBar: { x: 0, y: 300, width: 750, height: 100 },
|
|
193
|
+
leftSidePadding: { x: 0, y: 0, width: 0, height: 0 },
|
|
194
|
+
rightSidePadding: { x: 0, y: 0, width: 0, height: 0 },
|
|
195
|
+
statusBarAndAddressBar: { x: 0, y: 0, width: 750, height: 100 },
|
|
196
|
+
statusBar: { x: 0, y: 0, width: 750, height: 50 },
|
|
197
|
+
screenSize: { width: 750, height: 500 }
|
|
198
|
+
},
|
|
199
|
+
addressBarShadowPadding: 20,
|
|
200
|
+
toolBarShadowPadding: 20,
|
|
201
|
+
isAndroid: false
|
|
202
|
+
});
|
|
203
|
+
mockBrowserInstance.execute = vi.fn()
|
|
204
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0 (i=0, scrollY=0)
|
|
205
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars true
|
|
206
|
+
.mockResolvedValueOnce(1000) // getDocumentScrollHeight
|
|
207
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars false
|
|
208
|
+
// When trying to do i=1, scrollY would be negative, so it should error before the next execute calls
|
|
209
|
+
.mockResolvedValueOnce(0); // pageYOffset for error logging
|
|
210
|
+
await expect(getMobileFullPageNativeWebScreenshotsData(mockBrowserInstance, options))
|
|
211
|
+
.rejects.toThrow(/Negative scroll position detected/);
|
|
212
|
+
});
|
|
213
|
+
it('should throw error when scroll height cannot be determined', async () => {
|
|
214
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
215
|
+
mockBrowserInstance.execute = vi.fn()
|
|
216
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition
|
|
217
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
218
|
+
.mockResolvedValueOnce(undefined) // getDocumentScrollHeight returns undefined
|
|
219
|
+
.mockResolvedValueOnce(undefined); // hideScrollBars
|
|
220
|
+
const options = createMobileOptions();
|
|
221
|
+
await expect(getMobileFullPageNativeWebScreenshotsData(mockBrowserInstance, options))
|
|
222
|
+
.rejects.toThrow('Couldn\'t determine scroll height or screenshot size');
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe('getAndroidChromeDriverFullPageScreenshotsData', () => {
|
|
226
|
+
const createBaseOptions = (overrides = {}) => ({
|
|
227
|
+
devicePixelRatio: 1,
|
|
228
|
+
fullPageScrollTimeout: 1000,
|
|
229
|
+
innerHeight: 768,
|
|
230
|
+
hideAfterFirstScroll: [],
|
|
231
|
+
...overrides
|
|
232
|
+
});
|
|
233
|
+
beforeEach(() => {
|
|
234
|
+
logWarnSpy = vi.spyOn(log, 'warn');
|
|
235
|
+
vi.mocked(utilsModule.waitFor).mockResolvedValue(undefined);
|
|
236
|
+
vi.mocked(utilsModule.calculateDprData).mockImplementation((data) => data);
|
|
237
|
+
});
|
|
238
|
+
afterEach(() => {
|
|
239
|
+
vi.clearAllMocks();
|
|
240
|
+
logWarnSpy.mockRestore();
|
|
241
|
+
});
|
|
242
|
+
it('should take single screenshot when content fits in viewport', async () => {
|
|
243
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
244
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
245
|
+
width: 1366,
|
|
246
|
+
height: 768
|
|
247
|
+
});
|
|
248
|
+
mockBrowserInstance.execute = vi.fn()
|
|
249
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition
|
|
250
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
251
|
+
.mockResolvedValueOnce(768) // getDocumentScrollHeight
|
|
252
|
+
.mockResolvedValueOnce(undefined); // hideScrollBars
|
|
253
|
+
const options = createBaseOptions();
|
|
254
|
+
const result = await getAndroidChromeDriverFullPageScreenshotsData(mockBrowserInstance, options);
|
|
255
|
+
expect(result).toMatchSnapshot();
|
|
256
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalledTimes(1);
|
|
257
|
+
expect(result.data).toHaveLength(1);
|
|
258
|
+
});
|
|
259
|
+
it('should take multiple screenshots when content exceeds viewport', async () => {
|
|
260
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
261
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
262
|
+
width: 1366,
|
|
263
|
+
height: 768
|
|
264
|
+
});
|
|
265
|
+
mockBrowserInstance.execute = vi.fn()
|
|
266
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0
|
|
267
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
268
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight (2x viewport)
|
|
269
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
270
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 768
|
|
271
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
272
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight
|
|
273
|
+
.mockResolvedValueOnce(undefined); // hideScrollBars
|
|
274
|
+
const options = createBaseOptions();
|
|
275
|
+
const result = await getAndroidChromeDriverFullPageScreenshotsData(mockBrowserInstance, options);
|
|
276
|
+
expect(result).toMatchSnapshot();
|
|
277
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalledTimes(2);
|
|
278
|
+
expect(result.data).toHaveLength(2);
|
|
279
|
+
});
|
|
280
|
+
it('should hide elements after first scroll when hideAfterFirstScroll is provided', async () => {
|
|
281
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
282
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
283
|
+
width: 1366,
|
|
284
|
+
height: 768
|
|
285
|
+
});
|
|
286
|
+
mockBrowserInstance.execute = vi.fn()
|
|
287
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0
|
|
288
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
289
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight
|
|
290
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
291
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 768
|
|
292
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
293
|
+
.mockResolvedValueOnce(undefined) // hideRemoveElements
|
|
294
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight
|
|
295
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
296
|
+
.mockResolvedValueOnce(undefined); // hideRemoveElements (restore)
|
|
297
|
+
const mockElements = [{ tagName: 'div' }];
|
|
298
|
+
const options = createBaseOptions({ hideAfterFirstScroll: [mockElements] });
|
|
299
|
+
const result = await getAndroidChromeDriverFullPageScreenshotsData(mockBrowserInstance, options);
|
|
300
|
+
expect(result).toMatchSnapshot();
|
|
301
|
+
expect(mockBrowserInstance.execute).toHaveBeenCalledWith(expect.any(Function), { hide: [mockElements], remove: [] }, true);
|
|
302
|
+
expect(mockBrowserInstance.execute).toHaveBeenCalledWith(expect.any(Function), { hide: [mockElements], remove: [] }, false);
|
|
303
|
+
});
|
|
304
|
+
it('should handle error when hiding elements fails', async () => {
|
|
305
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
306
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
307
|
+
width: 1366,
|
|
308
|
+
height: 768
|
|
309
|
+
});
|
|
310
|
+
const executeError = new Error('Element not found');
|
|
311
|
+
mockBrowserInstance.execute = vi.fn()
|
|
312
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0
|
|
313
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
314
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight
|
|
315
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
316
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 768
|
|
317
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
318
|
+
.mockRejectedValueOnce(executeError) // hideRemoveElements fails
|
|
319
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight
|
|
320
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
321
|
+
.mockRejectedValueOnce(executeError); // hideRemoveElements restore fails
|
|
322
|
+
const mockElements = [{ tagName: 'div' }];
|
|
323
|
+
const options = createBaseOptions({ hideAfterFirstScroll: [mockElements] });
|
|
324
|
+
const result = await getAndroidChromeDriverFullPageScreenshotsData(mockBrowserInstance, options);
|
|
325
|
+
expect(result).toBeDefined();
|
|
326
|
+
expect(result.data).toHaveLength(2);
|
|
327
|
+
expect(logWarnSpy).toHaveBeenCalledTimes(2);
|
|
328
|
+
});
|
|
329
|
+
it('should throw error when scroll height cannot be determined', async () => {
|
|
330
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
331
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
332
|
+
width: 1366,
|
|
333
|
+
height: 768
|
|
334
|
+
});
|
|
335
|
+
mockBrowserInstance.execute = vi.fn()
|
|
336
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition
|
|
337
|
+
.mockResolvedValueOnce(undefined) // hideScrollBars
|
|
338
|
+
.mockResolvedValueOnce(undefined) // getDocumentScrollHeight returns undefined
|
|
339
|
+
.mockResolvedValueOnce(undefined); // hideScrollBars
|
|
340
|
+
const options = createBaseOptions();
|
|
341
|
+
await expect(getAndroidChromeDriverFullPageScreenshotsData(mockBrowserInstance, options))
|
|
342
|
+
.rejects.toThrow('Couldn\'t determine scroll height or screenshot size');
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
describe('getDesktopFullPageScreenshotsData', () => {
|
|
346
|
+
const createBaseOptions = (overrides = {}) => ({
|
|
347
|
+
devicePixelRatio: 1,
|
|
348
|
+
fullPageScrollTimeout: 1000,
|
|
349
|
+
innerHeight: 768,
|
|
350
|
+
hideAfterFirstScroll: [],
|
|
351
|
+
...overrides
|
|
352
|
+
});
|
|
353
|
+
beforeEach(() => {
|
|
354
|
+
logWarnSpy = vi.spyOn(log, 'warn');
|
|
355
|
+
vi.mocked(utilsModule.waitFor).mockResolvedValue(undefined);
|
|
356
|
+
vi.mocked(utilsModule.calculateDprData).mockImplementation((data) => data);
|
|
357
|
+
});
|
|
358
|
+
afterEach(() => {
|
|
359
|
+
vi.clearAllMocks();
|
|
360
|
+
logWarnSpy.mockRestore();
|
|
361
|
+
});
|
|
362
|
+
it('should take single screenshot when content fits in viewport', async () => {
|
|
363
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
364
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
365
|
+
width: 1366,
|
|
366
|
+
height: 768
|
|
367
|
+
});
|
|
368
|
+
mockBrowserInstance.execute = vi.fn()
|
|
369
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition
|
|
370
|
+
.mockResolvedValueOnce(768); // getDocumentScrollHeight
|
|
371
|
+
const options = createBaseOptions();
|
|
372
|
+
const result = await getDesktopFullPageScreenshotsData(mockBrowserInstance, options);
|
|
373
|
+
expect(result).toMatchSnapshot();
|
|
374
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalledTimes(1);
|
|
375
|
+
expect(mockBrowserInstance.execute).toHaveBeenCalledTimes(2); // scroll + getScrollHeight
|
|
376
|
+
expect(result.data).toHaveLength(1);
|
|
377
|
+
});
|
|
378
|
+
it('should take multiple screenshots when content exceeds viewport', async () => {
|
|
379
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
380
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
381
|
+
width: 1366,
|
|
382
|
+
height: 768
|
|
383
|
+
});
|
|
384
|
+
mockBrowserInstance.execute = vi.fn()
|
|
385
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0
|
|
386
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight (2x viewport)
|
|
387
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 768
|
|
388
|
+
.mockResolvedValueOnce(1536); // getDocumentScrollHeight
|
|
389
|
+
const options = createBaseOptions();
|
|
390
|
+
const result = await getDesktopFullPageScreenshotsData(mockBrowserInstance, options);
|
|
391
|
+
expect(result).toMatchSnapshot();
|
|
392
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalledTimes(2);
|
|
393
|
+
expect(result.data).toHaveLength(2);
|
|
394
|
+
});
|
|
395
|
+
it('should handle screenshot size adjustment when different from inner height', async () => {
|
|
396
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
397
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
398
|
+
width: 1366,
|
|
399
|
+
height: 768.4
|
|
400
|
+
});
|
|
401
|
+
mockBrowserInstance.execute = vi.fn()
|
|
402
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition
|
|
403
|
+
.mockResolvedValueOnce(768); // getDocumentScrollHeight
|
|
404
|
+
const options = createBaseOptions({ innerHeight: 768 });
|
|
405
|
+
const result = await getDesktopFullPageScreenshotsData(mockBrowserInstance, options);
|
|
406
|
+
expect(result).toMatchSnapshot();
|
|
407
|
+
expect(result.data).toHaveLength(1);
|
|
408
|
+
});
|
|
409
|
+
it('should hide elements after first scroll when hideAfterFirstScroll is provided', async () => {
|
|
410
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
411
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
412
|
+
width: 1366,
|
|
413
|
+
height: 768
|
|
414
|
+
});
|
|
415
|
+
mockBrowserInstance.execute = vi.fn()
|
|
416
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0
|
|
417
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight
|
|
418
|
+
.mockResolvedValueOnce(undefined) // hideRemoveElements
|
|
419
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 768
|
|
420
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight
|
|
421
|
+
.mockResolvedValueOnce(undefined); // hideRemoveElements (restore)
|
|
422
|
+
const mockElements = [{ tagName: 'div' }];
|
|
423
|
+
const options = createBaseOptions({ hideAfterFirstScroll: [mockElements] });
|
|
424
|
+
const result = await getDesktopFullPageScreenshotsData(mockBrowserInstance, options);
|
|
425
|
+
expect(result).toMatchSnapshot();
|
|
426
|
+
expect(mockBrowserInstance.execute).toHaveBeenCalledWith(expect.any(Function), { hide: [mockElements], remove: [] }, true);
|
|
427
|
+
expect(mockBrowserInstance.execute).toHaveBeenCalledWith(expect.any(Function), { hide: [mockElements], remove: [] }, false);
|
|
428
|
+
});
|
|
429
|
+
it('should handle error when hiding elements fails', async () => {
|
|
430
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
431
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
432
|
+
width: 1366,
|
|
433
|
+
height: 768
|
|
434
|
+
});
|
|
435
|
+
const executeError = new Error('Element not found');
|
|
436
|
+
mockBrowserInstance.execute = vi.fn()
|
|
437
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 0 (i=0)
|
|
438
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight (i=0) - triggers another iteration
|
|
439
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition 768 (i=1)
|
|
440
|
+
.mockRejectedValueOnce(executeError) // hideRemoveElements fails (i=1)
|
|
441
|
+
.mockResolvedValueOnce(1536) // getDocumentScrollHeight (i=1)
|
|
442
|
+
.mockRejectedValueOnce(executeError); // hideRemoveElements restore fails
|
|
443
|
+
const mockElements = [{ tagName: 'div' }];
|
|
444
|
+
const options = createBaseOptions({ hideAfterFirstScroll: [mockElements] });
|
|
445
|
+
const result = await getDesktopFullPageScreenshotsData(mockBrowserInstance, options);
|
|
446
|
+
expect(result).toBeDefined();
|
|
447
|
+
expect(result.data).toHaveLength(2);
|
|
448
|
+
expect(logWarnSpy).toHaveBeenCalledTimes(2);
|
|
449
|
+
});
|
|
450
|
+
it('should throw error when scroll height cannot be determined', async () => {
|
|
451
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: SMALL_IMAGE_STRING });
|
|
452
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
453
|
+
width: 1366,
|
|
454
|
+
height: 768
|
|
455
|
+
});
|
|
456
|
+
mockBrowserInstance.execute = vi.fn()
|
|
457
|
+
.mockResolvedValueOnce(undefined) // scrollToPosition
|
|
458
|
+
.mockResolvedValueOnce(undefined); // getDocumentScrollHeight returns undefined
|
|
459
|
+
const options = createBaseOptions();
|
|
460
|
+
await expect(getDesktopFullPageScreenshotsData(mockBrowserInstance, options))
|
|
461
|
+
.rejects.toThrow('Couldn\'t determine scroll height or screenshot size');
|
|
462
|
+
});
|
|
463
|
+
});
|
|
464
|
+
describe('takeBase64BiDiScreenshot', () => {
|
|
465
|
+
it('should take a BiDi screenshot with no arguments (uses defaults)', async () => {
|
|
466
|
+
const mockBrowserInstance = createMockBrowserInstance();
|
|
467
|
+
const result = await takeBase64BiDiScreenshot({ browserInstance: mockBrowserInstance });
|
|
468
|
+
expect(result).toBe(SMALL_IMAGE_STRING);
|
|
469
|
+
});
|
|
470
|
+
it('should take a BiDi screenshot with default viewport origin', async () => {
|
|
471
|
+
const mockBrowserInstance = createMockBrowserInstance();
|
|
472
|
+
const result = await takeBase64BiDiScreenshot({ browserInstance: mockBrowserInstance });
|
|
473
|
+
expect(result).toBe(SMALL_IMAGE_STRING);
|
|
474
|
+
});
|
|
475
|
+
it('should take a BiDi screenshot with document origin', async () => {
|
|
476
|
+
const mockBrowserInstance = createMockBrowserInstance();
|
|
477
|
+
const result = await takeBase64BiDiScreenshot({
|
|
478
|
+
browserInstance: mockBrowserInstance,
|
|
479
|
+
origin: 'document'
|
|
480
|
+
});
|
|
481
|
+
expect(result).toBe(SMALL_IMAGE_STRING);
|
|
482
|
+
});
|
|
483
|
+
it('should take a BiDi screenshot with clip rectangle', async () => {
|
|
484
|
+
const mockBrowserInstance = createMockBrowserInstance();
|
|
485
|
+
const clipRectangle = {
|
|
486
|
+
x: 10,
|
|
487
|
+
y: 20,
|
|
488
|
+
width: 300,
|
|
489
|
+
height: 400,
|
|
490
|
+
};
|
|
491
|
+
const result = await takeBase64BiDiScreenshot({
|
|
492
|
+
browserInstance: mockBrowserInstance,
|
|
493
|
+
clip: clipRectangle
|
|
494
|
+
});
|
|
495
|
+
expect(result).toBe(SMALL_IMAGE_STRING);
|
|
496
|
+
});
|
|
497
|
+
});
|
|
498
|
+
describe('logHiddenRemovedError', () => {
|
|
499
|
+
beforeEach(() => {
|
|
500
|
+
logWarnSpy = vi.spyOn(log, 'warn');
|
|
501
|
+
});
|
|
502
|
+
afterEach(() => {
|
|
503
|
+
vi.clearAllMocks();
|
|
504
|
+
logWarnSpy.mockRestore();
|
|
505
|
+
});
|
|
506
|
+
it('should log a warning when the elements are not found', () => {
|
|
507
|
+
logHiddenRemovedError(new Error('Element not found'));
|
|
508
|
+
expect(logWarnSpy.mock.calls).toMatchSnapshot();
|
|
509
|
+
});
|
|
510
|
+
});
|
|
511
|
+
describe('takeWebElementScreenshot', () => {
|
|
512
|
+
const createBaseTakeWebElementScreenshotOptions = (overrides = {}) => ({
|
|
513
|
+
addressBarShadowPadding: 10,
|
|
514
|
+
browserInstance: createMockBrowserInstance(),
|
|
515
|
+
devicePixelRatio: 1,
|
|
516
|
+
deviceRectangles: DEVICE_RECTANGLES,
|
|
517
|
+
element: Promise.resolve(createMockElement()),
|
|
518
|
+
fallback: false,
|
|
519
|
+
initialDevicePixelRatio: 1,
|
|
520
|
+
isEmulated: false,
|
|
521
|
+
innerHeight: 768,
|
|
522
|
+
isAndroid: false,
|
|
523
|
+
isAndroidChromeDriverScreenshot: false,
|
|
524
|
+
isAndroidNativeWebScreenshot: false,
|
|
525
|
+
isIOS: false,
|
|
526
|
+
isLandscape: false,
|
|
527
|
+
toolBarShadowPadding: 5,
|
|
528
|
+
...overrides
|
|
529
|
+
});
|
|
530
|
+
beforeEach(() => {
|
|
531
|
+
logWarnSpy = vi.spyOn(log, 'warn');
|
|
532
|
+
});
|
|
533
|
+
afterEach(() => {
|
|
534
|
+
vi.clearAllMocks();
|
|
535
|
+
logWarnSpy.mockRestore();
|
|
536
|
+
});
|
|
537
|
+
describe('normal mode (fallback = false)', () => {
|
|
538
|
+
it('should successfully take element screenshot using webdriver element screenshot', async () => {
|
|
539
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: MEDIUM_IMAGE_STRING, takeElementScreenshot: SMALL_IMAGE_STRING });
|
|
540
|
+
const mockElement = createMockElement();
|
|
541
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
542
|
+
width: 300,
|
|
543
|
+
height: 200
|
|
544
|
+
});
|
|
545
|
+
const options = createBaseTakeWebElementScreenshotOptions({
|
|
546
|
+
browserInstance: mockBrowserInstance,
|
|
547
|
+
element: Promise.resolve(mockElement)
|
|
548
|
+
});
|
|
549
|
+
const result = await takeWebElementScreenshot(options);
|
|
550
|
+
expect(result).toMatchSnapshot();
|
|
551
|
+
expect(mockBrowserInstance.takeElementScreenshot).toHaveBeenCalled();
|
|
552
|
+
expect(mockBrowserInstance.takeScreenshot).not.toHaveBeenCalled();
|
|
553
|
+
});
|
|
554
|
+
it('should throw error when element has zero width', async () => {
|
|
555
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeElementScreenshot: SMALL_IMAGE_STRING });
|
|
556
|
+
const mockElement = createMockElement();
|
|
557
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
558
|
+
width: 0,
|
|
559
|
+
height: 200
|
|
560
|
+
});
|
|
561
|
+
const options = createBaseTakeWebElementScreenshotOptions({
|
|
562
|
+
browserInstance: mockBrowserInstance,
|
|
563
|
+
element: Promise.resolve(mockElement)
|
|
564
|
+
});
|
|
565
|
+
vi.mocked(rectanglesModule.determineElementRectangles).mockResolvedValue({
|
|
566
|
+
x: 10,
|
|
567
|
+
y: 20,
|
|
568
|
+
width: 300,
|
|
569
|
+
height: 200
|
|
570
|
+
});
|
|
571
|
+
const result = await takeWebElementScreenshot(options);
|
|
572
|
+
expect(logWarnSpy.mock.calls).toMatchSnapshot();
|
|
573
|
+
expect(result.isWebDriverElementScreenshot).toBe(false);
|
|
574
|
+
expect(mockBrowserInstance.takeElementScreenshot).toHaveBeenCalled();
|
|
575
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalled();
|
|
576
|
+
});
|
|
577
|
+
it('should throw error when element has zero height', async () => {
|
|
578
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeElementScreenshot: SMALL_IMAGE_STRING });
|
|
579
|
+
const mockElement = createMockElement();
|
|
580
|
+
vi.mocked(utilsModule.getBase64ScreenshotSize).mockReturnValue({
|
|
581
|
+
width: 300,
|
|
582
|
+
height: 0
|
|
583
|
+
});
|
|
584
|
+
const options = createBaseTakeWebElementScreenshotOptions({
|
|
585
|
+
browserInstance: mockBrowserInstance,
|
|
586
|
+
element: Promise.resolve(mockElement)
|
|
587
|
+
});
|
|
588
|
+
vi.mocked(rectanglesModule.determineElementRectangles).mockResolvedValue({
|
|
589
|
+
x: 10,
|
|
590
|
+
y: 20,
|
|
591
|
+
width: 300,
|
|
592
|
+
height: 200
|
|
593
|
+
});
|
|
594
|
+
const result = await takeWebElementScreenshot(options);
|
|
595
|
+
expect(logWarnSpy.mock.calls).toMatchSnapshot();
|
|
596
|
+
expect(result.isWebDriverElementScreenshot).toBe(false);
|
|
597
|
+
expect(mockBrowserInstance.takeElementScreenshot).toHaveBeenCalled();
|
|
598
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalled();
|
|
599
|
+
});
|
|
600
|
+
it('should fallback when takeElementScreenshot throws an error', async () => {
|
|
601
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: MEDIUM_IMAGE_STRING });
|
|
602
|
+
const mockElement = createMockElement();
|
|
603
|
+
mockBrowserInstance.takeElementScreenshot = vi.fn().mockRejectedValue(new Error('Element screenshot failed'));
|
|
604
|
+
vi.mocked(rectanglesModule.determineElementRectangles).mockResolvedValue({
|
|
605
|
+
x: 10,
|
|
606
|
+
y: 20,
|
|
607
|
+
width: 300,
|
|
608
|
+
height: 200
|
|
609
|
+
});
|
|
610
|
+
const options = createBaseTakeWebElementScreenshotOptions({
|
|
611
|
+
browserInstance: mockBrowserInstance,
|
|
612
|
+
element: Promise.resolve(mockElement)
|
|
613
|
+
});
|
|
614
|
+
const result = await takeWebElementScreenshot(options);
|
|
615
|
+
expect(logWarnSpy.mock.calls).toMatchSnapshot();
|
|
616
|
+
expect(result).toMatchSnapshot();
|
|
617
|
+
expect(mockBrowserInstance.takeElementScreenshot).toHaveBeenCalledWith('element-123');
|
|
618
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalled();
|
|
619
|
+
expect(result.isWebDriverElementScreenshot).toBe(false);
|
|
620
|
+
expect(rectanglesModule.determineElementRectangles).toHaveBeenCalled();
|
|
621
|
+
});
|
|
622
|
+
});
|
|
623
|
+
describe('fallback mode (fallback = true)', () => {
|
|
624
|
+
it('should take full screenshot and determine element rectangles', async () => {
|
|
625
|
+
const mockBrowserInstance = createMockBrowserInstance({ takeScreenshot: MEDIUM_IMAGE_STRING });
|
|
626
|
+
const mockElement = createMockElement();
|
|
627
|
+
const mockRectangles = { x: 50, y: 100, width: 250, height: 150 };
|
|
628
|
+
vi.mocked(rectanglesModule.determineElementRectangles).mockResolvedValue(mockRectangles);
|
|
629
|
+
const options = createBaseTakeWebElementScreenshotOptions({
|
|
630
|
+
browserInstance: mockBrowserInstance,
|
|
631
|
+
element: Promise.resolve(mockElement),
|
|
632
|
+
fallback: true
|
|
633
|
+
});
|
|
634
|
+
const result = await takeWebElementScreenshot(options);
|
|
635
|
+
expect(result).toMatchSnapshot();
|
|
636
|
+
expect(mockBrowserInstance.takeScreenshot).toHaveBeenCalled();
|
|
637
|
+
expect(mockBrowserInstance.takeElementScreenshot).not.toHaveBeenCalled();
|
|
638
|
+
expect(rectanglesModule.determineElementRectangles).toHaveBeenCalledWith({
|
|
639
|
+
browserInstance: mockBrowserInstance,
|
|
640
|
+
base64Image: MEDIUM_IMAGE_STRING,
|
|
641
|
+
element: Promise.resolve(mockElement),
|
|
642
|
+
options: {
|
|
643
|
+
devicePixelRatio: 1,
|
|
644
|
+
deviceRectangles: DEVICE_RECTANGLES,
|
|
645
|
+
initialDevicePixelRatio: 1,
|
|
646
|
+
innerHeight: 768,
|
|
647
|
+
isEmulated: false,
|
|
648
|
+
isAndroidNativeWebScreenshot: false,
|
|
649
|
+
isAndroid: false,
|
|
650
|
+
isIOS: false
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
});
|
|
654
|
+
});
|
|
655
|
+
});
|
|
656
|
+
});
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ElementScreenshotDataOptions, ElementScreenshotData } from './screenshots.interfaces.js';
|
|
2
|
+
export declare function takeElementScreenshot(browserInstance: WebdriverIO.Browser, options: ElementScreenshotDataOptions, shouldUseBidi?: boolean): Promise<ElementScreenshotData>;
|
|
3
|
+
//# sourceMappingURL=takeElementScreenshots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"takeElementScreenshots.d.ts","sourceRoot":"","sources":["../../src/methods/takeElementScreenshots.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAItG,wBAAsB,qBAAqB,CACvC,eAAe,EAAE,WAAW,CAAC,OAAO,EACpC,OAAO,EAAE,4BAA4B,EACrC,aAAa,GAAE,OAAe,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAKhC"}
|