From 7d690e2cf7c38c993b77a3a3b2d79044b58be5da Mon Sep 17 00:00:00 2001 From: "Taro.Nonoyama" Date: Tue, 16 Jun 2026 11:30:38 +0900 Subject: [PATCH 1/3] fix: prevent false emulation detection inside iframe context --- .changeset/fix-iframe-emulation.md | 5 ++++ .../getScreenDimensions.test.ts | 27 +++++++++++++++++++ .../clientSideScripts/getScreenDimensions.ts | 2 ++ 3 files changed, 34 insertions(+) create mode 100644 .changeset/fix-iframe-emulation.md diff --git a/.changeset/fix-iframe-emulation.md b/.changeset/fix-iframe-emulation.md new file mode 100644 index 000000000..1ab5115c7 --- /dev/null +++ b/.changeset/fix-iframe-emulation.md @@ -0,0 +1,5 @@ +--- +"@wdio/image-comparison-core": patch +--- + +fix: prevent false emulation detection when checkElement is called inside an iframe after switchFrame diff --git a/packages/image-comparison-core/src/clientSideScripts/getScreenDimensions.test.ts b/packages/image-comparison-core/src/clientSideScripts/getScreenDimensions.test.ts index a2b8093cc..d101602a2 100644 --- a/packages/image-comparison-core/src/clientSideScripts/getScreenDimensions.test.ts +++ b/packages/image-comparison-core/src/clientSideScripts/getScreenDimensions.test.ts @@ -168,6 +168,33 @@ describe('getScreenDimensions', () => { expect(dimensions.dimensions.window.screenHeight).toBe(1800) }) + it('should not detect emulation when running inside an iframe', () => { + const originalSelf = window.self + Object.defineProperty(window, 'self', { + value: {} as Window, + configurable: true, + writable: true, + }) + + Object.defineProperty(window, 'devicePixelRatio', { value: 3, configurable: true }) + Object.defineProperty(window, 'innerWidth', { value: 50, configurable: true }) + Object.defineProperty(window, 'innerHeight', { value: 100, configurable: true }) + Object.defineProperty(window, 'matchMedia', { + value: vi.fn().mockImplementation(() => ({ matches: false })), + ...CONFIGURABLE, + }) + + const dimensions = getScreenDimensions(false) + + Object.defineProperty(window, 'self', { + value: originalSelf, + configurable: true, + writable: true, + }) + + expect(dimensions.dimensions.window.isEmulated).toBe(false) + }) + it('should handle zero devicePixelRatio', () => { Object.defineProperty(window, 'devicePixelRatio', { value: 0, configurable: true }) Object.defineProperty(window, 'innerWidth', { value: 1920, configurable: true }) diff --git a/packages/image-comparison-core/src/clientSideScripts/getScreenDimensions.ts b/packages/image-comparison-core/src/clientSideScripts/getScreenDimensions.ts index 73c3f6f17..d1add4582 100644 --- a/packages/image-comparison-core/src/clientSideScripts/getScreenDimensions.ts +++ b/packages/image-comparison-core/src/clientSideScripts/getScreenDimensions.ts @@ -10,8 +10,10 @@ export default function getScreenDimensions(isMobile: boolean): ScreenDimensions const dpr = window.devicePixelRatio || 1 const minEdge = Math.min(width, height) const maxEdge = Math.max(width, height) + const isInIframe = window.self !== window.top const isLikelyEmulated = !isMobile && // Only check for emulated on desktop + !isInIframe && // Skip emulation detection inside iframes dpr >= 2 && // High-DPI signal minEdge <= 800 && // Catch phones/tablets in portrait/landscape maxEdge <= 1280 && // Conservative max for emulated tablet sizes From 7da133918def25e3bea52fc6f31bbeb67df2c307 Mon Sep 17 00:00:00 2001 From: Wim Selles Date: Tue, 23 Jun 2026 06:10:54 +0200 Subject: [PATCH 2/3] Apply suggestion from @wswebcreation --- .changeset/fix-iframe-emulation.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.changeset/fix-iframe-emulation.md b/.changeset/fix-iframe-emulation.md index 1ab5115c7..72fa39188 100644 --- a/.changeset/fix-iframe-emulation.md +++ b/.changeset/fix-iframe-emulation.md @@ -3,3 +3,7 @@ --- fix: prevent false emulation detection when checkElement is called inside an iframe after switchFrame + +### Committers: 1 + +- Taro.Nonoyama([@n2-freevas](https://github.com/n2-freevas)) From f3b871656fbbe30b1cb749e194baf98f7ca46469 Mon Sep 17 00:00:00 2001 From: Wim Selles Date: Tue, 23 Jun 2026 06:14:34 +0200 Subject: [PATCH 3/3] Prevent false emulation detection in iframe context Fixes the issue of false emulation detection when checkElement is called inside an iframe after switching frames. --- .changeset/fix-iframe-emulation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/fix-iframe-emulation.md b/.changeset/fix-iframe-emulation.md index 72fa39188..7683642f1 100644 --- a/.changeset/fix-iframe-emulation.md +++ b/.changeset/fix-iframe-emulation.md @@ -1,5 +1,6 @@ --- "@wdio/image-comparison-core": patch +"@wdio/visual-service": patch --- fix: prevent false emulation detection when checkElement is called inside an iframe after switchFrame