UNPKG

@wdio/image-comparison-core

Version:

Image comparison core module for @wdio/visual-service - WebdriverIO visual testing framework

75 lines (74 loc) 3.29 kB
import { screenMethodCompareOptions } from '../helpers/options.js'; import { executeImageCompare } from '../methods/images.js'; import { determineDeviceBlockOuts, determineIgnoreRegions } from '../methods/rectangles.js'; import { extractCommonCheckVariables, buildBaseExecuteCompareOptions } from '../helpers/utils.js'; import saveAppScreen from './saveAppScreen.js'; /** * Compare an image of the viewport of the screen */ export default async function checkAppScreen({ browserInstance, checkScreenOptions, folders, instanceData, isNativeContext = true, tag, testContext, }) { // 1. Set some variables const commonCheckVariables = extractCommonCheckVariables({ folders, instanceData, wicOptions: checkScreenOptions.wic }); const saveAppScreenOptions = { wic: checkScreenOptions.wic, method: { ...{ hideElements: [] }, ...{ removeElements: [] }, } }; const screenCompareOptions = { ...checkScreenOptions.wic.compareOptions, ...checkScreenOptions.method, // Use the hide and remove elements from the checkScreenOptions and add them to the ignore array ignore: [ ...checkScreenOptions.method.ignore || [], ...checkScreenOptions.method.hideElements || [], ...checkScreenOptions.method.removeElements || [], ] }; // 2. Take the actual screenshot and retrieve the needed data const { devicePixelRatio, fileName, base64Image } = await saveAppScreen({ browserInstance, folders, instanceData, isNativeContext, saveScreenOptions: saveAppScreenOptions, tag, }); // 3. Determine the ignore regions and compare options const ignoreRegions = await determineIgnoreRegions(browserInstance, screenCompareOptions.ignore || []); const deviceIgnoreRegions = await determineDeviceBlockOuts({ isAndroid: commonCheckVariables.isAndroid, screenCompareOptions, instanceData, }); const methodCompareOptions = screenMethodCompareOptions(checkScreenOptions.method); const baseExecuteCompareOptions = buildBaseExecuteCompareOptions({ commonCheckVariables, wicCompareOptions: checkScreenOptions.wic.compareOptions, methodCompareOptions, devicePixelRatio, fileName, additionalProperties: { ignoreRegions: [...ignoreRegions, ...deviceIgnoreRegions], } }); // 4. Now execute the compare and return the data const executeCompareOptions = { compareOptions: baseExecuteCompareOptions.compareOptions, devicePixelRatio: baseExecuteCompareOptions.devicePixelRatio, deviceRectangles: baseExecuteCompareOptions.deviceRectangles, fileName: baseExecuteCompareOptions.fileName, folderOptions: baseExecuteCompareOptions.folderOptions, ignoreRegions: baseExecuteCompareOptions.ignoreRegions, isAndroid: baseExecuteCompareOptions.isAndroid, isAndroidNativeWebScreenshot: baseExecuteCompareOptions.isAndroidNativeWebScreenshot, }; return executeImageCompare({ isViewPortScreenshot: true, isNativeContext, options: executeCompareOptions, testContext, actualBase64Image: base64Image, }); }