Skip to content

Commit 8ad8d62

Browse files
committed
fix: proper fix
1 parent 080af64 commit 8ad8d62

7 files changed

Lines changed: 28 additions & 22 deletions

File tree

.changeset/fix-save-methods-always-save.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,16 @@ Previously, when `alwaysSaveActualImage: false` was set in the configuration, `s
1010
The `alwaysSaveActualImage` option is intended to control whether actual images are saved during `check*` methods (comparison operations), not `save*` methods. Since `save*` methods are explicitly designed to save screenshots, they should always save files regardless of this setting.
1111

1212
This fix ensures:
13-
- `save*` methods always save files to disk, even when `alwaysSaveActualImage: false` is set
13+
- `save*` methods always save files to disk, even when `alwaysSaveActualImage: false` is set in the config
1414
- `alwaysSaveActualImage: false` continues to work correctly for `check*` methods (as intended for issue #1115)
1515
- The behavior is now consistent: `save*` = always save, `check*` = respect `alwaysSaveActualImage` setting
1616

17+
**Implementation details:**
18+
- The visual service overrides `alwaysSaveActualImage: true` when calling `save*` methods directly from the browser API
19+
- `save*` methods respect whatever `alwaysSaveActualImage` value is passed to them (no special logic needed)
20+
- `check*` methods pass through the config value (which may be `false`), so `save*` methods respect it when called internally
21+
- This clean separation ensures `save*` methods work correctly when called directly while still respecting `alwaysSaveActualImage` for `check*` methods
22+
1723
# Committers: 1
1824

1925
- Wim Selles ([@wswebcreation](https://github.com/wswebcreation))

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@ export default async function saveAppElement(
4141
tag,
4242
isNativeContext,
4343
instanceData: instanceData,
44-
// save* methods should always save files, regardless of alwaysSaveActualImage setting
45-
// (alwaysSaveActualImage only applies to check* methods)
46-
wicOptions: { ...saveElementOptions.wic, alwaysSaveActualImage: true }
44+
wicOptions: saveElementOptions.wic
4745
})
4846

4947
return afterScreenshot(browserInstance, afterOptions)

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ export default async function saveAppScreen(
5252
tag,
5353
isNativeContext,
5454
instanceData,
55-
// save* methods should always save files, regardless of alwaysSaveActualImage setting
56-
// (alwaysSaveActualImage only applies to check* methods)
57-
wicOptions: { ...saveScreenOptions.wic, alwaysSaveActualImage: true }
55+
wicOptions: saveScreenOptions.wic
5856
})
5957

6058
return afterScreenshot(browserInstance, afterOptions)

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ export default async function saveFullPageScreen(
2828
}
2929

3030
// 2. Set some variables
31-
const { formatImageName, savePerInstance } = saveFullPageOptions.wic
3231
const enableLegacyScreenshotMethod = getMethodOrWicOption(saveFullPageOptions.method, saveFullPageOptions.wic, 'enableLegacyScreenshotMethod')
3332
const fullPageScrollTimeout = getMethodOrWicOption(saveFullPageOptions.method, saveFullPageOptions.wic, 'fullPageScrollTimeout')
3433
const hideAfterFirstScroll: HTMLElement[] = saveFullPageOptions.method.hideAfterFirstScroll || []
@@ -88,11 +87,8 @@ export default async function saveFullPageScreen(
8887
instanceData,
8988
enrichedInstanceData,
9089
beforeOptions,
91-
// save* methods should always save files, regardless of alwaysSaveActualImage setting
92-
// (alwaysSaveActualImage only applies to check* methods)
93-
wicOptions: { formatImageName, savePerInstance, alwaysSaveActualImage: true }
90+
wicOptions: saveFullPageOptions.wic
9491
})
9592

9693
return afterScreenshot(browserInstance, afterOptions!)
9794
}
98-

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default async function saveWebElement(
2424
}: InternalSaveElementMethodOptions
2525
): Promise<ScreenshotOutput> {
2626
// 1. Set some variables
27-
const { addressBarShadowPadding, autoElementScroll, formatImageName, savePerInstance } = saveElementOptions.wic
27+
const { addressBarShadowPadding, autoElementScroll } = saveElementOptions.wic
2828
const enableLegacyScreenshotMethod = getMethodOrWicOption(saveElementOptions.method, saveElementOptions.wic, 'enableLegacyScreenshotMethod')
2929
const resizeDimensions: ResizeDimensions | number = saveElementOptions.method.resizeDimensions || DEFAULT_RESIZE_DIMENSIONS
3030

@@ -81,9 +81,7 @@ export default async function saveWebElement(
8181
instanceData,
8282
enrichedInstanceData,
8383
beforeOptions,
84-
// save* methods should always save files, regardless of alwaysSaveActualImage setting
85-
// (alwaysSaveActualImage only applies to check* methods)
86-
wicOptions: { formatImageName, savePerInstance, alwaysSaveActualImage: true }
84+
wicOptions: saveElementOptions.wic
8785
})
8886

8987
return afterScreenshot(browserInstance, afterOptions)

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export default async function saveWebScreen(
2222
}: InternalSaveScreenMethodOptions
2323
): Promise<ScreenshotOutput> {
2424
// 1. Set some variables
25-
const { addIOSBezelCorners, formatImageName, savePerInstance } = saveScreenOptions.wic
25+
const { addIOSBezelCorners } = saveScreenOptions.wic
2626
const enableLegacyScreenshotMethod = getMethodOrWicOption(saveScreenOptions.method, saveScreenOptions.wic, 'enableLegacyScreenshotMethod')
2727

2828
// 2. Prepare the screenshot
@@ -76,9 +76,7 @@ export default async function saveWebScreen(
7676
instanceData,
7777
enrichedInstanceData,
7878
beforeOptions,
79-
// save* methods should always save files, regardless of alwaysSaveActualImage setting
80-
// (alwaysSaveActualImage only applies to check* methods)
81-
wicOptions: { formatImageName, savePerInstance, alwaysSaveActualImage: true }
79+
wicOptions: saveScreenOptions.wic
8280
})
8381

8482
return afterScreenshot(browserInstance, afterOptions)

packages/visual-service/src/service.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,12 @@ export default class WdioImageComparisonService extends BaseClass {
229229
}
230230
const isCurrentContextNative = self.contextManager.isNativeContext
231231

232+
// save* methods should always save files, regardless of alwaysSaveActualImage config
233+
const isSaveCommand = commandName === 'saveElement'
234+
const wicOptions = isSaveCommand
235+
? { ...self.defaultOptions, alwaysSaveActualImage: true }
236+
: self.defaultOptions
237+
232238
return [{
233239
browserInstance,
234240
element,
@@ -237,7 +243,7 @@ export default class WdioImageComparisonService extends BaseClass {
237243
isNativeContext: isCurrentContextNative,
238244
tag,
239245
[elementOptionsKey]: {
240-
wic: self.defaultOptions,
246+
wic: wicOptions,
241247
method: elementOptions,
242248
},
243249
testContext: enrichTestContext({
@@ -294,14 +300,20 @@ export default class WdioImageComparisonService extends BaseClass {
294300
}
295301
const isCurrentContextNative = self.contextManager.isNativeContext
296302

303+
// save* methods should always save files, regardless of alwaysSaveActualImage config
304+
const isSaveCommand = commandName === 'saveScreen' || commandName === 'saveFullPageScreen' || commandName === 'saveTabbablePage'
305+
const wicOptions = isSaveCommand
306+
? { ...self.defaultOptions, alwaysSaveActualImage: true }
307+
: self.defaultOptions
308+
297309
return [{
298310
browserInstance,
299311
folders: getFolders(pageOptions, self.folders, self.#getBaselineFolder()),
300312
instanceData: updatedInstanceData,
301313
isNativeContext: isCurrentContextNative,
302314
tag,
303315
[pageOptionsKey]: {
304-
wic: self.defaultOptions,
316+
wic: wicOptions,
305317
method: pageOptions,
306318
},
307319
testContext: enrichTestContext({

0 commit comments

Comments
 (0)