@wdio/image-comparison-core
Version:
Image comparison core module for @wdio/visual-service - WebdriverIO visual testing framework
75 lines (74 loc) • 3.29 kB
JavaScript
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,
});
}