Skip to content
This repository has been archived by the owner on Dec 24, 2023. It is now read-only.

Commit

Permalink
feat: initial add hide/remove elements to all methods
Browse files Browse the repository at this point in the history
  • Loading branch information
wswebcreation committed Apr 27, 2019
1 parent e378643 commit 455c1c8
Show file tree
Hide file tree
Showing 15 changed files with 67 additions and 2 deletions.
7 changes: 7 additions & 0 deletions lib/clientSideScripts/hideRemoveElements.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/**
* Hide or remove elements on the page
*/
export default function hideRemoveElements(hideRemoveElements: { hide: HTMLElement[], remove: HTMLElement[] }, hideRemove: boolean): void {
hideRemoveElements.hide.forEach(element => element.style.visibility = hideRemove ? 'hidden' : '');
hideRemoveElements.remove.forEach(element => element.style.display = hideRemove ? 'none' : '');
}
2 changes: 2 additions & 0 deletions lib/commands/checkElement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ export default async function checkElement(
...('disableCSSAnimation' in checkElementOptions.method ? {disableCSSAnimation: checkElementOptions.method.disableCSSAnimation} : {}),
...('hideScrollBars' in checkElementOptions.method ? {hideScrollBars: checkElementOptions.method.hideScrollBars} : {}),
...('resizeDimensions' in checkElementOptions.method ? {resizeDimensions: checkElementOptions.method.resizeDimensions} : {}),
...{hideElements: checkElementOptions.method.hideElements || []},
...{removeElements: checkElementOptions.method.removeElements || []},
}
};
const {devicePixelRatio, fileName} = await saveElement(methods, instanceData, folders, element, tag, saveElementOptions);
Expand Down
2 changes: 2 additions & 0 deletions lib/commands/checkFullPageScreen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ export default async function checkFullPageScreen(
: {}
),
...('hideScrollBars' in checkFullPageOptions.method ? {hideScrollBars: checkFullPageOptions.method.hideScrollBars} : {}),
...{hideElements: checkFullPageOptions.method.hideElements || []},
...{removeElements: checkFullPageOptions.method.removeElements || []},
}
};
const {devicePixelRatio, fileName} = await saveFullPageScreen(methods, instanceData, folders, tag, saveFullPageOptions);
Expand Down
2 changes: 2 additions & 0 deletions lib/commands/checkScreen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ export default async function checkScreen(
method: {
...('disableCSSAnimation' in checkScreenOptions.method ? {disableCSSAnimation: checkScreenOptions.method.disableCSSAnimation} : {}),
...('hideScrollBars' in checkScreenOptions.method ? {hideScrollBars: checkScreenOptions.method.hideScrollBars} : {}),
...{hideElements: checkScreenOptions.method.hideElements || []},
...{removeElements: checkScreenOptions.method.removeElements || []},
}
};
const {devicePixelRatio, fileName} = await saveScreen(methods, instanceData, folders, tag, saveScreenOptions);
Expand Down
4 changes: 4 additions & 0 deletions lib/commands/element.interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ export interface SaveElementMethodOptions {
resizeDimensions?: ResizeDimensions | number;
// The padding that needs to be added to the tool bar on iOS and Android
toolBarShadowPadding?: number;
// Elements that need to be hidden (visibility: hidden) before saving a screenshot
hideElements?: HTMLElement[];
// Elements that need to be removed (display: none) before saving a screenshot
removeElements?: HTMLElement[];
}

interface CheckOptions extends SaveElementMethodOptions, CheckMethodOptions {
Expand Down
4 changes: 4 additions & 0 deletions lib/commands/fullPage.interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ interface SaveFullPageMethodOptions {
resizeDimensions?: ResizeDimensions | number;
// The padding that needs to be added to the tool bar on iOS and Android
toolBarShadowPadding?: number;
// Elements that need to be hidden (visibility: hidden) before saving a screenshot
hideElements?: HTMLElement[];
// Elements that need to be removed (display: none) before saving a screenshot
removeElements?: HTMLElement[];
}

interface CheckOptions extends SaveFullPageMethodOptions, CheckMethodOptions {
Expand Down
7 changes: 6 additions & 1 deletion lib/commands/saveElement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {SaveElementOptions} from './element.interfaces';
import {ElementRectanglesOptions, RectanglesOutput} from '../methods/rectangles.interfaces';
import {BeforeScreenshotOptions, BeforeScreenshotResult} from '../helpers/beforeScreenshot.interface';
import {DEFAULT_RESIZE_DIMENSIONS} from '../helpers/constants';
import {ResizeDimensions} from '../methods/images.interfaces';

/**
* Saves an image of an element
Expand All @@ -34,14 +35,18 @@ export default async function saveElement(
const hideScrollBars: boolean = 'hideScrollBars' in saveElementOptions.method
? saveElementOptions.method.hideScrollBars
: saveElementOptions.wic.hideScrollBars;
const resizeDimensions = saveElementOptions.method.resizeDimensions || DEFAULT_RESIZE_DIMENSIONS;
const resizeDimensions: ResizeDimensions | number = saveElementOptions.method.resizeDimensions || DEFAULT_RESIZE_DIMENSIONS;
const hideElements: HTMLElement[] = saveElementOptions.method.hideElements || [];
const removeElements: HTMLElement[] = saveElementOptions.method.removeElements || [];

// 2. Prepare the beforeScreenshot
const beforeOptions: BeforeScreenshotOptions = {
instanceData,
addressBarShadowPadding,
disableCSSAnimation,
hideElements,
noScrollBars: hideScrollBars,
removeElements,
toolBarShadowPadding,
};
const enrichedInstanceData: BeforeScreenshotResult = await beforeScreenshot(methods.executor, beforeOptions, true);
Expand Down
4 changes: 4 additions & 0 deletions lib/commands/saveFullPageScreen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,17 @@ export default async function saveFullPageScreen(
const fullPageScrollTimeout: number = 'fullPageScrollTimeout' in saveFullPageOptions.method
? saveFullPageOptions.method.fullPageScrollTimeout
: saveFullPageOptions.wic.fullPageScrollTimeout;
const hideElements: HTMLElement[] = saveFullPageOptions.method.hideElements || [];
const removeElements: HTMLElement[] = saveFullPageOptions.method.removeElements || [];

// 2. Prepare the beforeScreenshot
const beforeOptions: BeforeScreenshotOptions = {
instanceData,
addressBarShadowPadding,
disableCSSAnimation,
hideElements,
noScrollBars: hideScrollBars,
removeElements,
toolBarShadowPadding,
};
const enrichedInstanceData: BeforeScreenshotResult = await beforeScreenshot(methods.executor, beforeOptions, true);
Expand Down
4 changes: 4 additions & 0 deletions lib/commands/saveScreen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,17 @@ export default async function saveScreen(
const hideScrollBars: boolean = 'hideScrollBars' in saveScreenOptions.method
? saveScreenOptions.method.hideScrollBars
: saveScreenOptions.wic.hideScrollBars;
const hideElements: HTMLElement[] = saveScreenOptions.method.hideElements || [];
const removeElements: HTMLElement[] = saveScreenOptions.method.removeElements || [];

// 2. Prepare the beforeScreenshot
const beforeOptions: BeforeScreenshotOptions = {
instanceData,
addressBarShadowPadding,
disableCSSAnimation,
hideElements,
noScrollBars: hideScrollBars,
removeElements,
toolBarShadowPadding,
};
const enrichedInstanceData: BeforeScreenshotResult = await beforeScreenshot(methods.executor, beforeOptions);
Expand Down
4 changes: 4 additions & 0 deletions lib/commands/screen.interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ interface SaveScreenMethodOptions {
disableCSSAnimation?: boolean;
// Hide scrollbars, this is optional
hideScrollBars?: boolean;
// Elements that need to be hidden (visibility: hidden) before saving a screenshot
hideElements?: HTMLElement[];
// Elements that need to be removed (display: none) before saving a screenshot
removeElements?: HTMLElement[];
}

interface CheckOptions extends SaveScreenMethodOptions, CheckMethodOptions {
Expand Down
4 changes: 4 additions & 0 deletions lib/helpers/afterScreenshot.interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ export interface AfterScreenshotOptions {
filePath: ScreenshotFilePathOptions;
// The file name options object
fileName: ScreenshotFileNameOptions;
// Elements that need to be hidden (visibility: hidden) before saving a screenshot
hideElements?: HTMLElement[];
// Elements that need to be removed (display: none) before saving a screenshot
removeElements?: HTMLElement[];
}

export interface ScreenshotFilePathOptions {
Expand Down
4 changes: 4 additions & 0 deletions lib/helpers/beforeScreenshot.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ export interface BeforeScreenshotOptions {
noScrollBars: boolean;
// The padding that needs to be added to the tool bar on iOS and Android
toolBarShadowPadding: number;
// Elements that need to be hidden (visibility: hidden) before saving a screenshot
hideElements: HTMLElement[];
// Elements that need to be removed (display: none) before saving a screenshot
removeElements: HTMLElement[];
}

export interface BeforeScreenshotResult extends EnrichedInstanceData {}
4 changes: 4 additions & 0 deletions lib/helpers/beforeScreenshot.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ describe('beforeScreenshot', () => {
disableCSSAnimation: true,
noScrollBars: true,
toolBarShadowPadding: 6,
hideElements: [<HTMLElement><any>'<div></div>'],
removeElements: [<HTMLElement><any>'<div></div>'],
};

expect(await beforeScreenshot(MOCKED_EXECUTOR, options)).toMatchSnapshot();
Expand All @@ -38,6 +40,8 @@ describe('beforeScreenshot', () => {
disableCSSAnimation: true,
noScrollBars: true,
toolBarShadowPadding: 6,
hideElements: [<HTMLElement><any>'<div></div>'],
removeElements: [<HTMLElement><any>'<div></div>'],
};

expect(await beforeScreenshot(MOCKED_EXECUTOR, options, true)).toMatchSnapshot();
Expand Down
15 changes: 14 additions & 1 deletion lib/helpers/beforeScreenshot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {getAddressBarShadowPadding, getToolBarShadowPadding} from './utils';
import getEnrichedInstanceData from '../methods/instanceData';
import {BeforeScreenshotOptions, BeforeScreenshotResult} from './beforeScreenshot.interface';
import {Executor} from '../methods/methods.interface';
import hideRemoveElements from '../clientSideScripts/hideRemoveElements';

/**
* Methods that need to be executed before a screenshot will be taken
Expand All @@ -16,7 +17,14 @@ export default async function beforeScreenshot(
): Promise<BeforeScreenshotResult> {

const {browserName, nativeWebScreenshot, platformName} = options.instanceData;
const {addressBarShadowPadding, disableCSSAnimation, noScrollBars, toolBarShadowPadding} = options;
const {
addressBarShadowPadding,
disableCSSAnimation,
hideElements,
noScrollBars,
removeElements,
toolBarShadowPadding,
} = options;
const addressBarPadding = getAddressBarShadowPadding({
platformName,
browserName,
Expand All @@ -29,6 +37,11 @@ export default async function beforeScreenshot(
// Hide the scrollbars
await executor(hideScrollBars, noScrollBars);

// Hide and or Remove elements
if (hideElements.length > 0 || removeElements.length > 0) {
await executor(hideRemoveElements, {hide: hideElements, remove: removeElements}, true);
}

// Set some custom css
await executor(setCustomCss, {addressBarPadding, disableCSSAnimation, id: CUSTOM_CSS_ID, toolBarPadding});

Expand Down
2 changes: 2 additions & 0 deletions lib/mocks/mocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ export const BEFORE_SCREENSHOT_OPTIONS: BeforeScreenshotOptions = {
disableCSSAnimation: true,
noScrollBars: true,
toolBarShadowPadding: 6,
hideElements: [<HTMLElement><any>'<div></div>'],
removeElements: [<HTMLElement><any>'<div></div>'],
};
export const NAVIGATOR_APP_VERSIONS = {
ANDROID: {
Expand Down

0 comments on commit 455c1c8

Please sign in to comment.