Skip to content

Commit 788379b

Browse files
committed
chore: replaced takeBase64Screenshot implementation
- updated tests
1 parent 17f13e9 commit 788379b

4 files changed

Lines changed: 29 additions & 27 deletions

File tree

packages/image-comparison-core/src/commands/saveAppScreen.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export default async function saveAppScreen(
3737
} = instanceData
3838

3939
// 2. Take the screenshot
40-
let base64Image: string = await takeBase64Screenshot(methods.screenShot)
40+
let base64Image: string = await takeBase64Screenshot()
4141

4242
// 3. We only need to use the `makeCroppedBase64Image` for iOS and when `addIOSBezelCorners` is true
4343
if (isIOS && addIOSBezelCorners) {

packages/image-comparison-core/src/commands/saveWebScreen.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,15 @@ export default async function saveWebScreen(
8282
// 3. Take the screenshot
8383
let base64Image: string
8484

85-
if (canUseBidiScreenshot(methods) && !isMobile && !enableLegacyScreenshotMethod) {
85+
if (canUseBidiScreenshot() && !isMobile && !enableLegacyScreenshotMethod) {
8686
// 3a. Take the screenshot with the BiDi method
8787
base64Image = await takeBase64BiDiScreenshot({
8888
bidiScreenshot: methods.bidiScreenshot!,
8989
getWindowHandle: methods.getWindowHandle!,
9090
})
9191
} else {
9292
// 3b. Take the screenshot with the regular method
93-
base64Image = await takeBase64Screenshot(methods.screenShot)
93+
base64Image = await takeBase64Screenshot()
9494

9595
// Determine the rectangles
9696
const screenRectangleOptions: ScreenRectanglesOptions = {

packages/image-comparison-core/src/methods/screenshots.test.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@ import type { FullPageScreenshotDataOptions } from './screenshots.interfaces.js'
44
import { IMAGE_STRING } from '../mocks/mocks.js'
55
import { DEVICE_RECTANGLES } from '../helpers/constants.js'
66

7+
vi.mock('@wdio/globals', () => ({
8+
browser: {
9+
takeScreenshot: () => Promise.resolve(IMAGE_STRING)
10+
}
11+
}))
12+
713
describe('screenshots', () => {
814
describe('getBase64FullPageScreenshotsData', () => {
9-
const MOCKED_TAKESCREENSHOT = vi.fn().mockResolvedValue(IMAGE_STRING)
1015

1116
it('should get the Android nativeWebScreenshot fullpage screenshot data', async () => {
1217
const options: FullPageScreenshotDataOptions = {
@@ -48,7 +53,7 @@ describe('screenshots', () => {
4853
.mockResolvedValueOnce({})
4954

5055
// Replace the screenshot with a `mocked-screenshot-string`;
51-
const result = await getBase64FullPageScreenshotsData(MOCKED_TAKESCREENSHOT, MOCKED_EXECUTOR, options)
56+
const result = await getBase64FullPageScreenshotsData(MOCKED_EXECUTOR, options)
5257
result.data.forEach((dataObject) => (dataObject.screenshot = 'mocked-screenshot-string'))
5358

5459
expect(result).toMatchSnapshot()
@@ -99,7 +104,7 @@ describe('screenshots', () => {
99104
.mockResolvedValueOnce({})
100105

101106
// Replace the screenshot with a `mocked-screenshot-string`;
102-
const result = await getBase64FullPageScreenshotsData(MOCKED_TAKESCREENSHOT, MOCKED_EXECUTOR, options)
107+
const result = await getBase64FullPageScreenshotsData(MOCKED_EXECUTOR, options)
103108
result.data.forEach((dataObject) => (dataObject.screenshot = 'mocked-screenshot-string'))
104109

105110
expect(result).toMatchSnapshot()
@@ -147,7 +152,7 @@ describe('screenshots', () => {
147152
.mockResolvedValueOnce({})
148153

149154
// Replace the screenshot with a `mocked-screenshot-string`;
150-
const result = await getBase64FullPageScreenshotsData(MOCKED_TAKESCREENSHOT, MOCKED_EXECUTOR, options)
155+
const result = await getBase64FullPageScreenshotsData(MOCKED_EXECUTOR, options)
151156
result.data.forEach((dataObject) => (dataObject.screenshot = 'mocked-screenshot-string'))
152157

153158
expect(result).toMatchSnapshot()
@@ -199,7 +204,7 @@ describe('screenshots', () => {
199204
.mockResolvedValueOnce({})
200205

201206
// Replace the screenshot with a `mocked-screenshot-string`;
202-
const result = await getBase64FullPageScreenshotsData(MOCKED_TAKESCREENSHOT, MOCKED_EXECUTOR, options)
207+
const result = await getBase64FullPageScreenshotsData(MOCKED_EXECUTOR, options)
203208
result.data.forEach((dataObject) => (dataObject.screenshot = 'mocked-screenshot-string'))
204209

205210
expect(result).toMatchSnapshot()
@@ -246,7 +251,7 @@ describe('screenshots', () => {
246251
.mockResolvedValueOnce({})
247252

248253
// Replace the screenshot with a `mocked-screenshot-string`;
249-
const result = await getBase64FullPageScreenshotsData(MOCKED_TAKESCREENSHOT, MOCKED_EXECUTOR, options)
254+
const result = await getBase64FullPageScreenshotsData(MOCKED_EXECUTOR, options)
250255
result.data.forEach((dataObject) => (dataObject.screenshot = 'mocked-screenshot-string'))
251256

252257
expect(result).toMatchSnapshot()
@@ -293,7 +298,7 @@ describe('screenshots', () => {
293298
.mockResolvedValueOnce({})
294299

295300
// Replace the screenshot with a `mocked-screenshot-string`;
296-
const result = await getBase64FullPageScreenshotsData(MOCKED_TAKESCREENSHOT, MOCKED_EXECUTOR, options)
301+
const result = await getBase64FullPageScreenshotsData(MOCKED_EXECUTOR, options)
297302
result.data.forEach((dataObject) => (dataObject.screenshot = 'mocked-screenshot-string'))
298303

299304
expect(result).toMatchSnapshot()
@@ -344,7 +349,7 @@ describe('screenshots', () => {
344349
.mockResolvedValueOnce({})
345350

346351
// Replace the screenshot with a `mocked-screenshot-string`;
347-
const result = await getBase64FullPageScreenshotsData(MOCKED_TAKESCREENSHOT, MOCKED_EXECUTOR, options)
352+
const result = await getBase64FullPageScreenshotsData(MOCKED_EXECUTOR, options)
348353
result.data.forEach((dataObject) => (dataObject.screenshot = 'mocked-screenshot-string'))
349354

350355
expect(result).toMatchSnapshot()
@@ -399,7 +404,7 @@ describe('screenshots', () => {
399404
.mockResolvedValueOnce(3200)
400405

401406
// Replace the screenshot with a `mocked-screenshot-string`;
402-
const result = await getBase64FullPageScreenshotsData(MOCKED_TAKESCREENSHOT, MOCKED_EXECUTOR, options)
407+
const result = await getBase64FullPageScreenshotsData(MOCKED_EXECUTOR, options)
403408
result.data.forEach((dataObject) => (dataObject.screenshot = 'mocked-screenshot-string'))
404409

405410
expect(result).toMatchSnapshot()
@@ -455,7 +460,7 @@ describe('screenshots', () => {
455460
.mockResolvedValueOnce({})
456461

457462
// Replace the screenshot with a `mocked-screenshot-string`;
458-
const result = await getBase64FullPageScreenshotsData(MOCKED_TAKESCREENSHOT, MOCKED_EXECUTOR, options)
463+
const result = await getBase64FullPageScreenshotsData(MOCKED_EXECUTOR, options)
459464
result.data.forEach((dataObject) => (dataObject.screenshot = 'mocked-screenshot-string'))
460465

461466
expect(result).toMatchSnapshot()

packages/image-comparison-core/src/methods/screenshots.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import logger from '@wdio/logger'
2+
import { browser } from '@wdio/globals'
23
import scrollToPosition from '../clientSideScripts/scrollToPosition.js'
34
import getDocumentScrollHeight from '../clientSideScripts/getDocumentScrollHeight.js'
45
import { calculateDprData, getBase64ScreenshotSize, waitFor } from '../helpers/utils.js'
5-
import type { BidiScreenshot, Executor, GetWindowHandle, TakeScreenShot } from './methods.interfaces.js'
6+
import type { BidiScreenshot, Executor, GetWindowHandle } from './methods.interfaces.js'
67
import type {
78
FullPageScreenshotOptions,
89
FullPageScreenshotNativeMobileOptions,
@@ -22,7 +23,6 @@ const log = logger('@wdio/visual-service:webdriver-image-comparison-screenshots'
2223
* Take a full page screenshots for desktop / iOS / Android
2324
*/
2425
export async function getBase64FullPageScreenshotsData(
25-
takeScreenshot: TakeScreenShot,
2626
executor: Executor,
2727
options: FullPageScreenshotDataOptions,
2828
): Promise<FullPageScreenshotsData> {
@@ -59,23 +59,22 @@ export async function getBase64FullPageScreenshotsData(
5959

6060
if ((isAndroid && isAndroidNativeWebScreenshot) || isIOS ) {
6161
// Create a fullpage screenshot for Android when a native web screenshot (so including status, address and toolbar) is created
62-
return getMobileFullPageNativeWebScreenshotsData(takeScreenshot, executor, nativeWebScreenshotOptions)
62+
return getMobileFullPageNativeWebScreenshotsData(executor, nativeWebScreenshotOptions)
6363
} else if (isAndroid && isAndroidChromeDriverScreenshot) {
6464
const chromeDriverOptions = { devicePixelRatio, fullPageScrollTimeout, hideAfterFirstScroll, innerHeight }
6565

6666
// Create a fullpage screenshot for Android when the ChromeDriver provides the screenshots
67-
return getAndroidChromeDriverFullPageScreenshotsData(takeScreenshot, executor, chromeDriverOptions)
67+
return getAndroidChromeDriverFullPageScreenshotsData(executor, chromeDriverOptions)
6868
}
6969

7070
// Create a fullpage screenshot for all desktops
71-
return getDesktopFullPageScreenshotsData(takeScreenshot, executor, desktopOptions)
71+
return getDesktopFullPageScreenshotsData(executor, desktopOptions)
7272
}
7373

7474
/**
7575
* Take a full page screenshots for native mobile
7676
*/
7777
export async function getMobileFullPageNativeWebScreenshotsData(
78-
takeScreenshot: TakeScreenShot,
7978
executor: Executor,
8079
options: FullPageScreenshotNativeMobileOptions,
8180
): Promise<FullPageScreenshotsData> {
@@ -124,7 +123,7 @@ export async function getMobileFullPageNativeWebScreenshotsData(
124123
}
125124

126125
// Take the screenshot and determine if it's rotated
127-
const screenshot = await takeBase64Screenshot(takeScreenshot)
126+
const screenshot = await takeBase64Screenshot()
128127
isRotated = Boolean(isLandscape && viewportHeight > viewportWidth)
129128

130129
// Determine scroll height and check if we need to scroll again
@@ -192,7 +191,6 @@ export async function getMobileFullPageNativeWebScreenshotsData(
192191
* Take a full page screenshot for Android with Chromedriver
193192
*/
194193
export async function getAndroidChromeDriverFullPageScreenshotsData(
195-
takeScreenshot: TakeScreenShot,
196194
executor: Executor,
197195
options: FullPageScreenshotOptions,
198196
): Promise<FullPageScreenshotsData> {
@@ -225,7 +223,7 @@ export async function getAndroidChromeDriverFullPageScreenshotsData(
225223
}
226224

227225
// Take the screenshot
228-
const screenshot = await takeBase64Screenshot(takeScreenshot)
226+
const screenshot = await takeBase64Screenshot()
229227
screenshotSize = getBase64ScreenshotSize(screenshot, devicePixelRatio)
230228

231229
// Determine scroll height and check if we need to scroll again
@@ -292,7 +290,6 @@ export async function getAndroidChromeDriverFullPageScreenshotsData(
292290
* Take a full page screenshots
293291
*/
294292
export async function getDesktopFullPageScreenshotsData(
295-
takeScreenshot: TakeScreenShot,
296293
executor: Executor,
297294
options: FullPageScreenshotOptions,
298295
): Promise<FullPageScreenshotsData> {
@@ -323,7 +320,7 @@ export async function getDesktopFullPageScreenshotsData(
323320
}
324321

325322
// Take the screenshot
326-
const screenshot = await takeBase64Screenshot(takeScreenshot)
323+
const screenshot = await takeBase64Screenshot()
327324
screenshotSize = getBase64ScreenshotSize(screenshot, devicePixelRatio)
328325

329326
// The actual screenshot size might be slightly different than the inner height
@@ -399,8 +396,8 @@ export async function getDesktopFullPageScreenshotsData(
399396
/**
400397
* Take a screenshot
401398
*/
402-
export async function takeBase64Screenshot(takeScreenshot: TakeScreenShot): Promise<string> {
403-
return takeScreenshot()
399+
export async function takeBase64Screenshot(): Promise<string> {
400+
return browser.takeScreenshot()
404401
}
405402

406403
/**
@@ -462,7 +459,7 @@ export async function takeWebElementScreenshot({
462459
takeElementScreenshot,
463460
}:TakeWebElementScreenshot): Promise<TakeWebElementScreenshotData>{
464461
if (fallback) {
465-
const base64Image = await takeBase64Screenshot(screenShot)
462+
const base64Image = await takeBase64Screenshot()
466463
const elementRectangleOptions: ElementRectanglesOptions = {
467464
/**
468465
* ToDo: handle NaA case

0 commit comments

Comments
 (0)