From c13849c9f99121e27e7cbf312ac2c494c50f9c4d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 15 Sep 2024 18:28:19 +0900 Subject: [PATCH 01/34] fix(browser): fix viewport for non ui case --- .../browser/src/node/providers/playwright.ts | 3 ++ test/browser/fixtures/viewport/basic.test.ts | 53 +++++++++++++++++++ .../fixtures/viewport/vitest.config.ts | 21 ++++++++ test/browser/specs/viewport.test.ts | 13 +++++ 4 files changed, 90 insertions(+) create mode 100644 test/browser/fixtures/viewport/basic.test.ts create mode 100644 test/browser/fixtures/viewport/vitest.config.ts create mode 100644 test/browser/specs/viewport.test.ts diff --git a/packages/browser/src/node/providers/playwright.ts b/packages/browser/src/node/providers/playwright.ts index cb24179e8479..5e77ce244dfc 100644 --- a/packages/browser/src/node/providers/playwright.ts +++ b/packages/browser/src/node/providers/playwright.ts @@ -116,6 +116,9 @@ export class PlaywrightBrowserProvider implements BrowserProvider { if (this.ctx.config.browser.ui) { options.viewport = null } + else { + options.viewport = this.ctx.config.browser.viewport + } const context = await browser.newContext(options) this.contexts.set(contextId, context) return context diff --git a/test/browser/fixtures/viewport/basic.test.ts b/test/browser/fixtures/viewport/basic.test.ts new file mode 100644 index 000000000000..6e80e461f7fb --- /dev/null +++ b/test/browser/fixtures/viewport/basic.test.ts @@ -0,0 +1,53 @@ +import { page, userEvent } from "@vitest/browser/context"; +import { expect, test } from "vitest"; + +test("drag and drop over large viewport", async () => { + // put boxes horizontally [1] [2] ... [30] + // then drag-and-drop from [1] to [30] + + const wrapper = document.createElement("div"); + wrapper.style.cssText = "display: flex; width: 3000px;"; + document.body.appendChild(wrapper); + + const events: { i: number; type: string }[] = []; + + for (let i = 1; i <= 30; i++) { + const el = document.createElement("div"); + el.textContent = `[${i}]`; + el.style.cssText = ` + flex: none; + width: 100px; + height: 100px; + border: 1px solid black; + box-sizing: border-box; + display: flex; + justify-content: center; + align-items: center; + `; + el.draggable = true; + wrapper.append(el); + + el.addEventListener("dragstart", (ev) => { + ev.dataTransfer.effectAllowed = "move"; + events.push({ type: "dragstart", i }); + }); + el.addEventListener("dragover", (ev) => { + ev.preventDefault(); + ev.dataTransfer.dropEffect = "move"; + events.push({ type: "dragover", i }); + }); + el.addEventListener("drop", (ev) => { + ev.preventDefault(); + events.push({ type: "drop", i }); + }); + } + + await userEvent.dragAndDrop(page.getByText("[1]"), page.getByText("[30]")); + + expect(events).toMatchObject( + expect.arrayContaining([ + { type: "dragstart", i: 1 }, + { type: "drop", i: 30 }, + ]), + ); +}); diff --git a/test/browser/fixtures/viewport/vitest.config.ts b/test/browser/fixtures/viewport/vitest.config.ts new file mode 100644 index 000000000000..403a56690a82 --- /dev/null +++ b/test/browser/fixtures/viewport/vitest.config.ts @@ -0,0 +1,21 @@ +import { fileURLToPath } from 'node:url' +import { defineConfig } from 'vitest/config' + +// pnpm -C test/browser test-fixtures --root fixtures/viewport --browser.ui=false +// pnpm -C test/browser test-fixtures --root fixtures/viewport --browser.headless=true + +const provider = process.env.PROVIDER || 'playwright' +const name = + process.env.BROWSER || (provider === 'playwright' ? 'chromium' : 'chrome') + +export default defineConfig({ + test: { + browser: { + enabled: true, + name, + provider, + viewport: { width: 3000, height: 400 } + }, + }, + cacheDir: fileURLToPath(new URL("./node_modules/.vite", import.meta.url)), +}) diff --git a/test/browser/specs/viewport.test.ts b/test/browser/specs/viewport.test.ts new file mode 100644 index 000000000000..97d1d2a25695 --- /dev/null +++ b/test/browser/specs/viewport.test.ts @@ -0,0 +1,13 @@ +import { expect, test } from 'vitest' +import { runBrowserTests } from './utils' + +// this works only on playwright + chrome? +test('viewport', async () => { + const { stderr, stdout } = await runBrowserTests({ + root: './fixtures/viewport', + reporters: [['verbose', { isTTY: false }]], + }) + + expect(stderr).toBe('') + expect(stdout).toContain('✓ basic.test.ts (1)') +}) From 8df9e9c24d2560119772ac915117c58417aadbc0 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 15 Sep 2024 18:38:40 +0900 Subject: [PATCH 02/34] test: tweak --- test/browser/specs/viewport.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/browser/specs/viewport.test.ts b/test/browser/specs/viewport.test.ts index 97d1d2a25695..3314ee8a04bf 100644 --- a/test/browser/specs/viewport.test.ts +++ b/test/browser/specs/viewport.test.ts @@ -9,5 +9,5 @@ test('viewport', async () => { }) expect(stderr).toBe('') - expect(stdout).toContain('✓ basic.test.ts (1)') + expect(stdout).toContain('✓ basic.test.ts') }) From 2cdab6656d3ae7a7ff8aa852c8f87f8ca8edcea7 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 15 Sep 2024 18:47:35 +0900 Subject: [PATCH 03/34] test: playwright only --- test/browser/specs/utils.ts | 2 +- test/browser/specs/viewport.test.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/test/browser/specs/utils.ts b/test/browser/specs/utils.ts index 53f1757d21e0..c579bdc43fc3 100644 --- a/test/browser/specs/utils.ts +++ b/test/browser/specs/utils.ts @@ -3,7 +3,7 @@ import type { UserConfig as ViteUserConfig } from 'vite' import type { UserConfig } from 'vitest' import { runVitest } from '../../test-utils' -const provider = process.env.PROVIDER || 'playwright' +export const provider = process.env.PROVIDER || 'playwright' export const browser = process.env.BROWSER || (provider !== 'playwright' ? 'chromium' : 'chrome') export async function runBrowserTests( diff --git a/test/browser/specs/viewport.test.ts b/test/browser/specs/viewport.test.ts index 3314ee8a04bf..c3e0e54bf721 100644 --- a/test/browser/specs/viewport.test.ts +++ b/test/browser/specs/viewport.test.ts @@ -1,8 +1,7 @@ import { expect, test } from 'vitest' -import { runBrowserTests } from './utils' +import { provider, runBrowserTests } from './utils' -// this works only on playwright + chrome? -test('viewport', async () => { +test.runIf(provider === 'playwright')('viewport', async () => { const { stderr, stdout } = await runBrowserTests({ root: './fixtures/viewport', reporters: [['verbose', { isTTY: false }]], From ad7f47e719150c72b54b590e43e07a82c86e9cb1 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 17 Sep 2024 15:27:03 +0900 Subject: [PATCH 04/34] fix: scale iframe wrapper --- packages/browser/src/client/orchestrator.ts | 14 ++++++++++++-- packages/browser/src/node/providers/playwright.ts | 3 --- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/browser/src/client/orchestrator.ts b/packages/browser/src/client/orchestrator.ts index 10d4c0bf4f73..cfdb6f0c568a 100644 --- a/packages/browser/src/client/orchestrator.ts +++ b/packages/browser/src/client/orchestrator.ts @@ -274,8 +274,18 @@ async function setIframeViewport( await ui.setIframeViewport(width, height) } else { - iframe.style.width = `${width}px` - iframe.style.height = `${height}px` + const scale = Math.min( + 1, + iframe.parentElement!.parentElement!.clientWidth / width, + iframe.parentElement!.parentElement!.clientHeight / height, + ) + iframe.parentElement!.style.cssText = ` + width: ${width}px; + height: ${height}px; + transform: scale(${scale}); + transform-origin: left top; + ` + await new Promise(r => requestAnimationFrame(r)) } } diff --git a/packages/browser/src/node/providers/playwright.ts b/packages/browser/src/node/providers/playwright.ts index 5e77ce244dfc..cb24179e8479 100644 --- a/packages/browser/src/node/providers/playwright.ts +++ b/packages/browser/src/node/providers/playwright.ts @@ -116,9 +116,6 @@ export class PlaywrightBrowserProvider implements BrowserProvider { if (this.ctx.config.browser.ui) { options.viewport = null } - else { - options.viewport = this.ctx.config.browser.viewport - } const context = await browser.newContext(options) this.contexts.set(contextId, context) return context From fd69f0c9d628c78cd5e84654cc5174168416d2fb Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 17 Sep 2024 15:55:09 +0900 Subject: [PATCH 05/34] fix: set data-scale --- packages/browser/src/client/orchestrator.ts | 1 + packages/browser/src/client/tester/context.ts | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/browser/src/client/orchestrator.ts b/packages/browser/src/client/orchestrator.ts index cfdb6f0c568a..66622ee78665 100644 --- a/packages/browser/src/client/orchestrator.ts +++ b/packages/browser/src/client/orchestrator.ts @@ -285,6 +285,7 @@ async function setIframeViewport( transform: scale(${scale}); transform-origin: left top; ` + iframe.parentElement?.setAttribute('data-scale', String(scale)) await new Promise(r => requestAnimationFrame(r)) } } diff --git a/packages/browser/src/client/tester/context.ts b/packages/browser/src/client/tester/context.ts index f498e89128a2..27226c867a90 100644 --- a/packages/browser/src/client/tester/context.ts +++ b/packages/browser/src/client/tester/context.ts @@ -277,8 +277,7 @@ function processHoverOptions(options_?: UserEventHoverOptions) { } function processDragAndDropOptions(options_?: UserEventDragAndDropOptions) { - // only ui scales the iframe, so we need to adjust the position - if (!options_ || !state().config.browser.ui) { + if (!options_) { return options_ } if (provider === 'playwright') { @@ -336,7 +335,7 @@ function processPlaywrightPosition(position: { x: number; y: number }) { } function getIframeScale() { - const testerUi = window.parent.document.querySelector('#tester-ui') as HTMLElement | null + const testerUi = window.parent.document.querySelector('#vitest-iframe')?.parentElement as HTMLElement | null if (!testerUi) { throw new Error(`Cannot find Tester element. This is a bug in Vitest. Please, open a new issue with reproduction.`) } From ecac5adb50823b41a33e922f7a995034cd42402e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 18 Sep 2024 11:12:08 +0900 Subject: [PATCH 06/34] fix: scale userEvent --- packages/browser/package.json | 2 +- packages/browser/src/client/tester/context.ts | 9 +++------ test/browser/test/viewport.test.ts | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/browser/package.json b/packages/browser/package.json index 51049ee01135..5001755e9106 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -64,7 +64,7 @@ "build:client": "vite build src/client", "build:node": "rollup -c", "dev:client": "vite build src/client --watch", - "dev:node": "rollup -c --watch --watch.include 'src/node/**'", + "dev:node": "rollup -c --watch --watch.include 'src/**'", "dev": "rimraf dist && pnpm run --stream '/^dev:/'" }, "peerDependencies": { diff --git a/packages/browser/src/client/tester/context.ts b/packages/browser/src/client/tester/context.ts index 27226c867a90..2f316e47f337 100644 --- a/packages/browser/src/client/tester/context.ts +++ b/packages/browser/src/client/tester/context.ts @@ -15,7 +15,6 @@ import { convertElementToCssSelector, getBrowserState, getWorkerState } from '.. // this file should not import anything directly, only types and utils -const state = () => getWorkerState() // @ts-expect-error not typed global const provider = __vitest_browser_runner__.provider function filepath() { @@ -222,8 +221,7 @@ function getTaskFullName(task: RunnerTask): string { } function processClickOptions(options_?: UserEventClickOptions) { - // only ui scales the iframe, so we need to adjust the position - if (!options_ || !state().config.browser.ui) { + if (!options_) { return options_ } if (provider === 'playwright') { @@ -250,8 +248,7 @@ function processClickOptions(options_?: UserEventClickOptions) { } function processHoverOptions(options_?: UserEventHoverOptions) { - // only ui scales the iframe, so we need to adjust the position - if (!options_ || !state().config.browser.ui) { + if (!options_) { return options_ } @@ -335,7 +332,7 @@ function processPlaywrightPosition(position: { x: number; y: number }) { } function getIframeScale() { - const testerUi = window.parent.document.querySelector('#vitest-iframe')?.parentElement as HTMLElement | null + const testerUi = window.parent.document.querySelector(`iframe[data-vitest]`)?.parentElement if (!testerUi) { throw new Error(`Cannot find Tester element. This is a bug in Vitest. Please, open a new issue with reproduction.`) } diff --git a/test/browser/test/viewport.test.ts b/test/browser/test/viewport.test.ts index 6e4f07a6f240..c70e137c8d0d 100644 --- a/test/browser/test/viewport.test.ts +++ b/test/browser/test/viewport.test.ts @@ -2,7 +2,7 @@ import { server } from '@vitest/browser/context' import { describe, expect, it } from 'vitest' describe.skipIf(server.provider === 'preview')('viewport window has been properly initialized', () => { - it.skipIf(!server.config.browser.headless)('viewport has proper size', () => { + it('viewport has proper size', () => { const { width, height } = server.config.browser.viewport const { width: actualWidth, height: actualHeight } = window.document.documentElement.getBoundingClientRect() From 8fe8f3599914afb6b1fd536b8f57e2612fbcdfd5 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 18 Sep 2024 11:57:05 +0900 Subject: [PATCH 07/34] wip: tweak --- packages/browser/src/client/orchestrator.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/browser/src/client/orchestrator.ts b/packages/browser/src/client/orchestrator.ts index 66622ee78665..579c4dfa031c 100644 --- a/packages/browser/src/client/orchestrator.ts +++ b/packages/browser/src/client/orchestrator.ts @@ -283,7 +283,6 @@ async function setIframeViewport( width: ${width}px; height: ${height}px; transform: scale(${scale}); - transform-origin: left top; ` iframe.parentElement?.setAttribute('data-scale', String(scale)) await new Promise(r => requestAnimationFrame(r)) From 402b5716c70aaf110b5c7c5df1c720b318cc9ebf Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 18 Sep 2024 12:04:41 +0900 Subject: [PATCH 08/34] wip: how about ubuntu --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 867c17924244..602f1efcbde2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -126,6 +126,7 @@ jobs: os: - macos-latest - windows-latest + - ubuntu-latest browser: - [chromium, chrome] - [firefox, firefox] From 3196a226a58ef99ad58f582580e46a110b8feb04 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 18 Sep 2024 12:14:43 +0900 Subject: [PATCH 09/34] Revert "wip: tweak" This reverts commit 8fe8f3599914afb6b1fd536b8f57e2612fbcdfd5. --- packages/browser/src/client/orchestrator.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/browser/src/client/orchestrator.ts b/packages/browser/src/client/orchestrator.ts index 579c4dfa031c..66622ee78665 100644 --- a/packages/browser/src/client/orchestrator.ts +++ b/packages/browser/src/client/orchestrator.ts @@ -283,6 +283,7 @@ async function setIframeViewport( width: ${width}px; height: ${height}px; transform: scale(${scale}); + transform-origin: left top; ` iframe.parentElement?.setAttribute('data-scale', String(scale)) await new Promise(r => requestAnimationFrame(r)) From 8d499534cc62569df7cd8c85bda7ce0f7880a906 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 18 Sep 2024 12:14:55 +0900 Subject: [PATCH 10/34] Revert "wip: how about ubuntu" This reverts commit 402b5716c70aaf110b5c7c5df1c720b318cc9ebf. --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 602f1efcbde2..867c17924244 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -126,7 +126,6 @@ jobs: os: - macos-latest - windows-latest - - ubuntu-latest browser: - [chromium, chrome] - [firefox, firefox] From 2c36ca9595fd15cc0ac9eb53c0c43f6e5db0ec11 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 18 Sep 2024 12:16:02 +0900 Subject: [PATCH 11/34] chore: revert this too --- test/browser/test/viewport.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/browser/test/viewport.test.ts b/test/browser/test/viewport.test.ts index c70e137c8d0d..6e4f07a6f240 100644 --- a/test/browser/test/viewport.test.ts +++ b/test/browser/test/viewport.test.ts @@ -2,7 +2,7 @@ import { server } from '@vitest/browser/context' import { describe, expect, it } from 'vitest' describe.skipIf(server.provider === 'preview')('viewport window has been properly initialized', () => { - it('viewport has proper size', () => { + it.skipIf(!server.config.browser.headless)('viewport has proper size', () => { const { width, height } = server.config.browser.viewport const { width: actualWidth, height: actualHeight } = window.document.documentElement.getBoundingClientRect() From 5f76302a520bebf8d5fe254fa7be0cf593e3e860 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 18 Sep 2024 12:34:10 +0900 Subject: [PATCH 12/34] test: non exact click position --- test/browser/test/userEvent.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/browser/test/userEvent.test.ts b/test/browser/test/userEvent.test.ts index d4b43802b600..20b5ceec3a7e 100644 --- a/test/browser/test/userEvent.test.ts +++ b/test/browser/test/userEvent.test.ts @@ -135,9 +135,10 @@ describe('userEvent.click', () => { }, }) + // not exact due to scaling and rounding expect(spy).toHaveBeenCalledWith({ - x: 200, - y: 150, + x: expect.closeTo(200, -1), + y: expect.closeTo(150, -1), }) }) }) From 3db24ebe330e9d6d3aac7be70fa7fc9d8915a594 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 18 Sep 2024 13:59:28 +0900 Subject: [PATCH 13/34] wip: give up webdriverio --- packages/browser/src/client/orchestrator.ts | 6 +++++- packages/browser/src/client/tester/context.ts | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/browser/src/client/orchestrator.ts b/packages/browser/src/client/orchestrator.ts index 66622ee78665..591785badb95 100644 --- a/packages/browser/src/client/orchestrator.ts +++ b/packages/browser/src/client/orchestrator.ts @@ -273,7 +273,7 @@ async function setIframeViewport( if (ui) { await ui.setIframeViewport(width, height) } - else { + else if (getBrowserState().provider === 'playwright') { const scale = Math.min( 1, iframe.parentElement!.parentElement!.clientWidth / width, @@ -288,6 +288,10 @@ async function setIframeViewport( iframe.parentElement?.setAttribute('data-scale', String(scale)) await new Promise(r => requestAnimationFrame(r)) } + else { + iframe.style.width = `${width}px` + iframe.style.height = `${height}px` + } } function debug(...args: unknown[]) { diff --git a/packages/browser/src/client/tester/context.ts b/packages/browser/src/client/tester/context.ts index 2f316e47f337..c040e323571b 100644 --- a/packages/browser/src/client/tester/context.ts +++ b/packages/browser/src/client/tester/context.ts @@ -337,6 +337,9 @@ function getIframeScale() { throw new Error(`Cannot find Tester element. This is a bug in Vitest. Please, open a new issue with reproduction.`) } const scaleAttribute = testerUi.getAttribute('data-scale') + if (scaleAttribute === null) { + return 1 + } const scale = Number(scaleAttribute) if (Number.isNaN(scale)) { throw new TypeError(`Cannot parse scale value from Tester element (${scaleAttribute}). This is a bug in Vitest. Please, open a new issue with reproduction.`) From 900f33ad5d1fb7dee594d978c0d5a058b586b598 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 1 Oct 2024 14:12:26 +0900 Subject: [PATCH 14/34] fix: scale all providers + relax tests --- packages/browser/src/client/orchestrator.ts | 6 +----- test/browser/fixtures/viewport/basic.test.ts | 7 ++++++- test/browser/specs/utils.ts | 2 +- test/browser/specs/viewport.test.ts | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/browser/src/client/orchestrator.ts b/packages/browser/src/client/orchestrator.ts index 591785badb95..66622ee78665 100644 --- a/packages/browser/src/client/orchestrator.ts +++ b/packages/browser/src/client/orchestrator.ts @@ -273,7 +273,7 @@ async function setIframeViewport( if (ui) { await ui.setIframeViewport(width, height) } - else if (getBrowserState().provider === 'playwright') { + else { const scale = Math.min( 1, iframe.parentElement!.parentElement!.clientWidth / width, @@ -288,10 +288,6 @@ async function setIframeViewport( iframe.parentElement?.setAttribute('data-scale', String(scale)) await new Promise(r => requestAnimationFrame(r)) } - else { - iframe.style.width = `${width}px` - iframe.style.height = `${height}px` - } } function debug(...args: unknown[]) { diff --git a/test/browser/fixtures/viewport/basic.test.ts b/test/browser/fixtures/viewport/basic.test.ts index 6e80e461f7fb..e138c1908e62 100644 --- a/test/browser/fixtures/viewport/basic.test.ts +++ b/test/browser/fixtures/viewport/basic.test.ts @@ -1,4 +1,4 @@ -import { page, userEvent } from "@vitest/browser/context"; +import { page, userEvent, server } from "@vitest/browser/context"; import { expect, test } from "vitest"; test("drag and drop over large viewport", async () => { @@ -42,6 +42,11 @@ test("drag and drop over large viewport", async () => { }); } + // drag and drop only works reliably on playwright + if (server.provider !== 'playwright' || server.platform === 'darwin') { + return + } + await userEvent.dragAndDrop(page.getByText("[1]"), page.getByText("[30]")); expect(events).toMatchObject( diff --git a/test/browser/specs/utils.ts b/test/browser/specs/utils.ts index c579bdc43fc3..53f1757d21e0 100644 --- a/test/browser/specs/utils.ts +++ b/test/browser/specs/utils.ts @@ -3,7 +3,7 @@ import type { UserConfig as ViteUserConfig } from 'vite' import type { UserConfig } from 'vitest' import { runVitest } from '../../test-utils' -export const provider = process.env.PROVIDER || 'playwright' +const provider = process.env.PROVIDER || 'playwright' export const browser = process.env.BROWSER || (provider !== 'playwright' ? 'chromium' : 'chrome') export async function runBrowserTests( diff --git a/test/browser/specs/viewport.test.ts b/test/browser/specs/viewport.test.ts index c3e0e54bf721..dda6b32eda99 100644 --- a/test/browser/specs/viewport.test.ts +++ b/test/browser/specs/viewport.test.ts @@ -1,7 +1,7 @@ import { expect, test } from 'vitest' -import { provider, runBrowserTests } from './utils' +import { runBrowserTests } from './utils' -test.runIf(provider === 'playwright')('viewport', async () => { +test('viewport', async () => { const { stderr, stdout } = await runBrowserTests({ root: './fixtures/viewport', reporters: [['verbose', { isTTY: false }]], From e983ea3a745840b8a609918a06468d4603949886 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 3 Oct 2024 17:18:19 +0900 Subject: [PATCH 15/34] fix: leave webdriverio out --- packages/browser/src/client/orchestrator.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/browser/src/client/orchestrator.ts b/packages/browser/src/client/orchestrator.ts index 66622ee78665..d9ce4a1e243f 100644 --- a/packages/browser/src/client/orchestrator.ts +++ b/packages/browser/src/client/orchestrator.ts @@ -273,6 +273,10 @@ async function setIframeViewport( if (ui) { await ui.setIframeViewport(width, height) } + else if (getBrowserState().provider === 'webdriverio') { + iframe.style.width = `${width}px` + iframe.style.height = `${height}px` + } else { const scale = Math.min( 1, From e68478d0f57a480d2973033ae84641cf9737c031 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 3 Oct 2024 17:24:18 +0900 Subject: [PATCH 16/34] chore: comment --- test/browser/fixtures/locators/blog.test.tsx | 1 + test/browser/fixtures/locators/vitest.config.ts | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/test/browser/fixtures/locators/blog.test.tsx b/test/browser/fixtures/locators/blog.test.tsx index 991c0eacbf0e..41a6834dd4d6 100644 --- a/test/browser/fixtures/locators/blog.test.tsx +++ b/test/browser/fixtures/locators/blog.test.tsx @@ -18,6 +18,7 @@ test('renders blog posts', async () => { await expect.element(secondPost.getByRole('heading')).toHaveTextContent('qui est esse') + // TODO: click doesn't work on webdriverio when iframe is scaled await userEvent.click(secondPost.getByRole('button', { name: 'Delete' })) expect(screen.getByRole('listitem').all()).toHaveLength(3) diff --git a/test/browser/fixtures/locators/vitest.config.ts b/test/browser/fixtures/locators/vitest.config.ts index e32545f4ab22..a9652cc4257d 100644 --- a/test/browser/fixtures/locators/vitest.config.ts +++ b/test/browser/fixtures/locators/vitest.config.ts @@ -16,7 +16,6 @@ export default defineConfig({ enabled: true, provider, name, - headless: true, }, onConsoleLog(log) { if (log.includes('ReactDOMTestUtils.act')) { From 06c929798c493d2f1da349b6e265a5805ef79243 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 3 Oct 2024 17:28:35 +0900 Subject: [PATCH 17/34] test: tweak --- test/browser/specs/viewport.test.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/test/browser/specs/viewport.test.ts b/test/browser/specs/viewport.test.ts index dda6b32eda99..e6daf48badd2 100644 --- a/test/browser/specs/viewport.test.ts +++ b/test/browser/specs/viewport.test.ts @@ -2,11 +2,18 @@ import { expect, test } from 'vitest' import { runBrowserTests } from './utils' test('viewport', async () => { - const { stderr, stdout } = await runBrowserTests({ + const { stderr, ctx } = await runBrowserTests({ root: './fixtures/viewport', - reporters: [['verbose', { isTTY: false }]], }) expect(stderr).toBe('') - expect(stdout).toContain('✓ basic.test.ts') + expect( + Object.fromEntries( + ctx.state.getFiles().map(f => [f.name, f.result.state]), + ), + ).toMatchInlineSnapshot(` + { + "basic.test.ts": "pass", + } + `) }) From 40dcb01805cdcd2e0c56af717f8c4b1f130e8194 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 13 Oct 2024 14:11:59 +0900 Subject: [PATCH 18/34] wip --- test/browser/specs/server-url.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/browser/specs/server-url.test.ts b/test/browser/specs/server-url.test.ts index 46010ee348bc..c037a1608bcb 100644 --- a/test/browser/specs/server-url.test.ts +++ b/test/browser/specs/server-url.test.ts @@ -10,7 +10,7 @@ test('server-url http', async () => { root: './fixtures/server-url', }) expect(stderr).toBe('') - expect(stdout).toContain(`Browser runner started by ${provider} at http://localhost:5173/`) + expect(stdout).toContain(`Browser runner started by ${provider} at http://localhost:`) }) test('server-url https', async () => { @@ -19,6 +19,6 @@ test('server-url https', async () => { root: './fixtures/server-url', }) expect(stderr).toBe('') - expect(stdout).toContain(`Browser runner started by ${provider} at https://localhost:5173/`) + expect(stdout).toContain(`Browser runner started by ${provider} at https://localhost:`) expect(stdout).toContain('Test Files 1 passed') }) From fb0c8bbb7ca63caeb70ffec37cc1d862f9da14d0 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 13 Oct 2024 14:14:30 +0900 Subject: [PATCH 19/34] debug --- test/browser/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/browser/package.json b/test/browser/package.json index 803ae208256d..72a1ab72a5ad 100644 --- a/test/browser/package.json +++ b/test/browser/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "test": "pnpm run test:webdriverio && pnpm run test:playwright", - "test:unit": "vitest --no-watch --config=vitest.config.unit.mts", + "test:unit": "vitest --no-watch --config=vitest.config.unit.mts /runner.", "test:webdriverio": "PROVIDER=webdriverio pnpm run test:unit", "test:playwright": "PROVIDER=playwright pnpm run test:unit", "test:safaridriver": "PROVIDER=webdriverio BROWSER=safari pnpm run test:unit", From 1edd33c9d6759f80286843a5edfe58529bb1936e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 13 Oct 2024 14:15:34 +0900 Subject: [PATCH 20/34] debug --- test/browser/specs/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/browser/specs/utils.ts b/test/browser/specs/utils.ts index 944d1492f61f..546ab607deb4 100644 --- a/test/browser/specs/utils.ts +++ b/test/browser/specs/utils.ts @@ -18,5 +18,5 @@ export async function runBrowserTests( headless: browser !== 'safari', ...config?.browser, } as UserConfig['browser'], - }, include, 'test', viteOverrides) + }, include, 'test', viteOverrides, { std: 'inherit' }) } From 640ade6f4d880d7878c4f49fb32a58a761fe5376 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 13 Oct 2024 14:27:28 +0900 Subject: [PATCH 21/34] debug --- test/browser/specs/runner.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index 290cf3424e0f..e62066f15432 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -10,6 +10,10 @@ describe('running browser tests', async () => { let failedTests: any[] beforeAll(async () => { + setInterval(() => { + console.log('[debug]', new Date().toISOString()) + }, 1000); + ({ stderr, stdout, From 705e61a36b0f14e257e7fd5dc55ea573f619b6aa Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Oct 2024 08:52:36 +0900 Subject: [PATCH 22/34] debug cleanup --- test/browser/fixtures/server-url/vitest.config.ts | 1 + test/browser/package.json | 2 +- test/browser/specs/runner.test.ts | 2 +- test/browser/specs/server-url.test.ts | 4 ++-- test/browser/specs/utils.ts | 3 ++- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/test/browser/fixtures/server-url/vitest.config.ts b/test/browser/fixtures/server-url/vitest.config.ts index 20cada4d3c5c..fdb74d6801bc 100644 --- a/test/browser/fixtures/server-url/vitest.config.ts +++ b/test/browser/fixtures/server-url/vitest.config.ts @@ -25,6 +25,7 @@ export default defineConfig({ ], test: { browser: { + api: process.env.TEST_HTTPS ? 51122 : 51133, enabled: true, provider, name: browser, diff --git a/test/browser/package.json b/test/browser/package.json index 72a1ab72a5ad..803ae208256d 100644 --- a/test/browser/package.json +++ b/test/browser/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "test": "pnpm run test:webdriverio && pnpm run test:playwright", - "test:unit": "vitest --no-watch --config=vitest.config.unit.mts /runner.", + "test:unit": "vitest --no-watch --config=vitest.config.unit.mts", "test:webdriverio": "PROVIDER=webdriverio pnpm run test:unit", "test:playwright": "PROVIDER=playwright pnpm run test:unit", "test:safaridriver": "PROVIDER=webdriverio BROWSER=safari pnpm run test:unit", diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index e62066f15432..cf55775f7add 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -17,7 +17,7 @@ describe('running browser tests', async () => { ({ stderr, stdout, - } = await runBrowserTests()) + } = await runBrowserTests(undefined, undefined, undefined, { std: 'inherit' })) const browserResult = await readFile('./browser.json', 'utf-8') browserResultJson = JSON.parse(browserResult) diff --git a/test/browser/specs/server-url.test.ts b/test/browser/specs/server-url.test.ts index c037a1608bcb..84f544cf5bd7 100644 --- a/test/browser/specs/server-url.test.ts +++ b/test/browser/specs/server-url.test.ts @@ -10,7 +10,7 @@ test('server-url http', async () => { root: './fixtures/server-url', }) expect(stderr).toBe('') - expect(stdout).toContain(`Browser runner started by ${provider} at http://localhost:`) + expect(stdout).toContain(`Browser runner started by ${provider} at http://localhost:51133/`) }) test('server-url https', async () => { @@ -19,6 +19,6 @@ test('server-url https', async () => { root: './fixtures/server-url', }) expect(stderr).toBe('') - expect(stdout).toContain(`Browser runner started by ${provider} at https://localhost:`) + expect(stdout).toContain(`Browser runner started by ${provider} at https://localhost:51122/`) expect(stdout).toContain('Test Files 1 passed') }) diff --git a/test/browser/specs/utils.ts b/test/browser/specs/utils.ts index 546ab607deb4..2e9ea19dfcbe 100644 --- a/test/browser/specs/utils.ts +++ b/test/browser/specs/utils.ts @@ -9,6 +9,7 @@ export async function runBrowserTests( config?: Omit & { browser?: Partial }, include?: string[], viteOverrides?: Partial, + runnerOptions?: Parameters[4], ) { return runVitest({ watch: false, @@ -18,5 +19,5 @@ export async function runBrowserTests( headless: browser !== 'safari', ...config?.browser, } as UserConfig['browser'], - }, include, 'test', viteOverrides, { std: 'inherit' }) + }, include, 'test', viteOverrides, runnerOptions) } From afce721f597bd91f6abadfa8dbb79687eff64bdc Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Oct 2024 08:53:31 +0900 Subject: [PATCH 23/34] chore: cleanup --- test/browser/fixtures/viewport/basic.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/browser/fixtures/viewport/basic.test.ts b/test/browser/fixtures/viewport/basic.test.ts index e138c1908e62..56746956d933 100644 --- a/test/browser/fixtures/viewport/basic.test.ts +++ b/test/browser/fixtures/viewport/basic.test.ts @@ -43,7 +43,7 @@ test("drag and drop over large viewport", async () => { } // drag and drop only works reliably on playwright - if (server.provider !== 'playwright' || server.platform === 'darwin') { + if (server.provider !== 'playwright') { return } From a03e9b83d1f044997578f7a2ad317553685df3b0 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Oct 2024 09:06:10 +0900 Subject: [PATCH 24/34] debug --- test/browser/specs/runner.test.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index cf55775f7add..64a0a6c477a4 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -9,11 +9,14 @@ describe('running browser tests', async () => { let passedTests: any[] let failedTests: any[] - beforeAll(async () => { - setInterval(() => { + beforeAll(() => { + const id = setInterval(() => { console.log('[debug]', new Date().toISOString()) - }, 1000); + }, 1000) + return () => clearInterval(id) + }) + beforeAll(async () => { ({ stderr, stdout, From b21e780502f4cd86837bcf587c13fe1aafff4ed9 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Oct 2024 09:18:31 +0900 Subject: [PATCH 25/34] debug --- test/browser/specs/runner.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index 64a0a6c477a4..007936f2c9b1 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -9,12 +9,12 @@ describe('running browser tests', async () => { let passedTests: any[] let failedTests: any[] - beforeAll(() => { - const id = setInterval(() => { - console.log('[debug]', new Date().toISOString()) - }, 1000) - return () => clearInterval(id) - }) + // beforeAll(() => { + // const id = setInterval(() => { + // console.log('[debug]', new Date().toISOString()) + // }, 1000) + // return () => clearInterval(id) + // }) beforeAll(async () => { ({ From 8ae2bcd21e8b115b4ca6b6d59920cd6729059fa0 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Oct 2024 09:41:54 +0900 Subject: [PATCH 26/34] test: tweak --- test/browser/specs/runner.test.ts | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index 007936f2c9b1..9be231b5291c 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -1,5 +1,5 @@ import { readFile } from 'node:fs/promises' -import { beforeAll, describe, expect, onTestFailed, test } from 'vitest' +import { beforeEach, describe, expect, onTestFailed, test } from 'vitest' import { browser, runBrowserTests } from './utils' describe('running browser tests', async () => { @@ -12,11 +12,33 @@ describe('running browser tests', async () => { // beforeAll(() => { // const id = setInterval(() => { // console.log('[debug]', new Date().toISOString()) - // }, 1000) + // }, 2000) // return () => clearInterval(id) // }) - beforeAll(async () => { + // beforeAll(async () => { + // ({ + // stderr, + // stdout, + // } = await runBrowserTests(undefined, undefined, undefined, { std: 'inherit' })) + + // const browserResult = await readFile('./browser.json', 'utf-8') + // browserResultJson = JSON.parse(browserResult) + // const getPassed = results => results.filter(result => result.status === 'passed' && !result.mesage) + // const getFailed = results => results.filter(result => result.status === 'failed') + // passedTests = getPassed(browserResultJson.testResults) + // failedTests = getFailed(browserResultJson.testResults) + // }) + + let bail = false + + beforeEach((ctx) => { + if (bail) { + ctx.skip() + } + }) + + test('tests are actually running', async () => { ({ stderr, stdout, @@ -28,10 +50,9 @@ describe('running browser tests', async () => { const getFailed = results => results.filter(result => result.status === 'failed') passedTests = getPassed(browserResultJson.testResults) failedTests = getFailed(browserResultJson.testResults) - }) - test('tests are actually running', () => { onTestFailed(() => { + bail = true console.error(stderr) }) From a47bb2a2ab7728909d8d25158a1771895052b718 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Oct 2024 09:50:08 +0900 Subject: [PATCH 27/34] test: more tweak --- test/browser/specs/runner.test.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index 9be231b5291c..3a926b0a7cb7 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -39,6 +39,11 @@ describe('running browser tests', async () => { }) test('tests are actually running', async () => { + onTestFailed(() => { + bail = true + console.error(stderr) + }); + ({ stderr, stdout, @@ -51,11 +56,6 @@ describe('running browser tests', async () => { passedTests = getPassed(browserResultJson.testResults) failedTests = getFailed(browserResultJson.testResults) - onTestFailed(() => { - bail = true - console.error(stderr) - }) - expect(browserResultJson.testResults).toHaveLength(19) expect(passedTests).toHaveLength(17) expect(failedTests).toHaveLength(2) From 36f5c9ae8bbfa96cd95b948f359dcd8806e324c8 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Oct 2024 09:59:00 +0900 Subject: [PATCH 28/34] debug --- test/browser/specs/runner.test.ts | 44 ++++++------------------------- 1 file changed, 8 insertions(+), 36 deletions(-) diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index 3a926b0a7cb7..8307c2226956 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -1,5 +1,5 @@ import { readFile } from 'node:fs/promises' -import { beforeEach, describe, expect, onTestFailed, test } from 'vitest' +import { beforeAll, describe, expect, onTestFailed, test } from 'vitest' import { browser, runBrowserTests } from './utils' describe('running browser tests', async () => { @@ -9,41 +9,7 @@ describe('running browser tests', async () => { let passedTests: any[] let failedTests: any[] - // beforeAll(() => { - // const id = setInterval(() => { - // console.log('[debug]', new Date().toISOString()) - // }, 2000) - // return () => clearInterval(id) - // }) - - // beforeAll(async () => { - // ({ - // stderr, - // stdout, - // } = await runBrowserTests(undefined, undefined, undefined, { std: 'inherit' })) - - // const browserResult = await readFile('./browser.json', 'utf-8') - // browserResultJson = JSON.parse(browserResult) - // const getPassed = results => results.filter(result => result.status === 'passed' && !result.mesage) - // const getFailed = results => results.filter(result => result.status === 'failed') - // passedTests = getPassed(browserResultJson.testResults) - // failedTests = getFailed(browserResultJson.testResults) - // }) - - let bail = false - - beforeEach((ctx) => { - if (bail) { - ctx.skip() - } - }) - - test('tests are actually running', async () => { - onTestFailed(() => { - bail = true - console.error(stderr) - }); - + beforeAll(async () => { ({ stderr, stdout, @@ -55,6 +21,12 @@ describe('running browser tests', async () => { const getFailed = results => results.filter(result => result.status === 'failed') passedTests = getPassed(browserResultJson.testResults) failedTests = getFailed(browserResultJson.testResults) + }) + + test('tests are actually running', () => { + onTestFailed(() => { + console.error(stderr) + }) expect(browserResultJson.testResults).toHaveLength(19) expect(passedTests).toHaveLength(17) From 1296e061ec60869bccd1ca8b868317cb619aba06 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Oct 2024 10:08:34 +0900 Subject: [PATCH 29/34] debug: isolate --- test/browser/specs/runner.test.ts | 5 +++++ test/browser/vitest.config.mts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index 8307c2226956..204926b04563 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -9,6 +9,11 @@ describe('running browser tests', async () => { let passedTests: any[] let failedTests: any[] + beforeAll(() => { + const id = setInterval(() => console.log('[debug]', new Date().toISOString()), 2000) + return () => clearInterval(id) + }) + beforeAll(async () => { ({ stderr, diff --git a/test/browser/vitest.config.mts b/test/browser/vitest.config.mts index b9f6ca89a18b..303f5fd77806 100644 --- a/test/browser/vitest.config.mts +++ b/test/browser/vitest.config.mts @@ -41,7 +41,7 @@ export default defineConfig({ name: browser, headless: false, provider, - isolate: false, + // isolate: false, testerScripts: [ { content: 'globalThis.__injected = []', From 453bb8e77cc7766cfba70b746f84a4f068f34e6f Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 14 Feb 2025 16:58:20 +0900 Subject: [PATCH 30/34] chore: cleanup --- test/browser/specs/runner.test.ts | 2 +- test/browser/specs/utils.ts | 3 +-- test/browser/vitest.config.mts | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index 121f8877ee4d..b871fba0eaa8 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -16,7 +16,7 @@ describe('running browser tests', async () => { const events: string[] = [] beforeAll(() => { - const id = setInterval(() => console.log('[debug]', new Date().toISOString()), 2000) + const id = setInterval(() => console.error('[debug]', new Date().toISOString()), 2000) return () => clearInterval(id) }) diff --git a/test/browser/specs/utils.ts b/test/browser/specs/utils.ts index 903c40108afb..f46242609e6e 100644 --- a/test/browser/specs/utils.ts +++ b/test/browser/specs/utils.ts @@ -9,7 +9,6 @@ export async function runBrowserTests( config?: Omit & { browser?: Partial }, include?: string[], viteOverrides?: Partial, - runnerOptions?: Parameters[4], ) { return runVitest({ watch: false, @@ -19,5 +18,5 @@ export async function runBrowserTests( headless: browser !== 'safari', ...config?.browser, } as UserConfig['browser'], - }, include, 'test', viteOverrides, runnerOptions) + }, include, 'test', viteOverrides) } diff --git a/test/browser/vitest.config.mts b/test/browser/vitest.config.mts index bd904dc096b0..89331be8c974 100644 --- a/test/browser/vitest.config.mts +++ b/test/browser/vitest.config.mts @@ -58,7 +58,7 @@ export default defineConfig({ ? playwrightInstances : webdriverioInstances, provider, - // isolate: false, + isolate: false, testerScripts: [ { content: 'globalThis.__injected = []', From f63502b769635e4e49ae05a50663f0e1834b274e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 3 Apr 2025 11:42:53 +0900 Subject: [PATCH 31/34] chore: lint --- packages/browser/src/client/tester/utils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/browser/src/client/tester/utils.ts b/packages/browser/src/client/tester/utils.ts index be93ef1a7f34..75751d05bede 100644 --- a/packages/browser/src/client/tester/utils.ts +++ b/packages/browser/src/client/tester/utils.ts @@ -182,7 +182,6 @@ export function getIframeScale(): number { return scale } - function escapeRegexForSelector(re: RegExp): string { // Unicode mode does not allow "identity character escapes", so we do not escape and // hope that it does not contain quotes and/or >> signs. From 3c0e0c7bdc742aa6e275838022255a0e4b56fa8a Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 3 Apr 2025 12:06:32 +0900 Subject: [PATCH 32/34] test: tweak --- test/browser/fixtures/viewport/vitest.config.ts | 12 ++++++------ test/browser/specs/runner.test.ts | 10 ++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/test/browser/fixtures/viewport/vitest.config.ts b/test/browser/fixtures/viewport/vitest.config.ts index 403a56690a82..fa44631c9269 100644 --- a/test/browser/fixtures/viewport/vitest.config.ts +++ b/test/browser/fixtures/viewport/vitest.config.ts @@ -1,20 +1,20 @@ import { fileURLToPath } from 'node:url' import { defineConfig } from 'vitest/config' +import { instances, provider } from '../../settings' // pnpm -C test/browser test-fixtures --root fixtures/viewport --browser.ui=false // pnpm -C test/browser test-fixtures --root fixtures/viewport --browser.headless=true -const provider = process.env.PROVIDER || 'playwright' -const name = - process.env.BROWSER || (provider === 'playwright' ? 'chromium' : 'chrome') - export default defineConfig({ test: { browser: { enabled: true, - name, provider, - viewport: { width: 3000, height: 400 } + instances: instances.map(instance => ({ + ...instance, + viewport: { width: 3000, height: 400 } + })), + }, }, cacheDir: fileURLToPath(new URL("./node_modules/.vite", import.meta.url)), diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index 6fcff3f7fc16..c00ecf4a06ea 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -227,6 +227,16 @@ test('timeout settings', async () => { } }) +test('viewport', async () => { + const { stdout, stderr } = await runBrowserTests({ + root: './fixtures/viewport', + }) + expect(stderr).toBe('') + instances.forEach(({ browser }) => { + expect(stdout).toReportPassedTest('basic.test.ts', browser) + }) +}) + test.runIf(provider === 'playwright')('timeout hooks', async () => { const { stderr } = await runBrowserTests({ root: './fixtures/timeout-hooks', From 6c646faf8666e918630bdc7ec8e5d0ed69e0f566 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 3 Apr 2025 12:50:14 +0900 Subject: [PATCH 33/34] chore: cleanup --- test/browser/specs/runner.test.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/browser/specs/runner.test.ts b/test/browser/specs/runner.test.ts index c00ecf4a06ea..cfcb9e5d7965 100644 --- a/test/browser/specs/runner.test.ts +++ b/test/browser/specs/runner.test.ts @@ -15,11 +15,6 @@ describe('running browser tests', async () => { let vitest: Vitest const events: string[] = [] - beforeAll(() => { - const id = setInterval(() => console.error('[debug]', new Date().toISOString()), 2000) - return () => clearInterval(id) - }) - beforeAll(async () => { ({ stderr, From e89b710b579497c576b1bb520c2db67759f3353c Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 4 Apr 2025 15:22:33 +0900 Subject: [PATCH 34/34] refactor: move data-scale --- packages/browser/src/client/orchestrator.ts | 1 + packages/browser/src/client/tester/utils.ts | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/browser/src/client/orchestrator.ts b/packages/browser/src/client/orchestrator.ts index 0baf062f2a8c..dbeef5d49e7a 100644 --- a/packages/browser/src/client/orchestrator.ts +++ b/packages/browser/src/client/orchestrator.ts @@ -262,6 +262,7 @@ async function setIframeViewport( else if (getBrowserState().provider === 'webdriverio') { iframe.style.width = `${width}px` iframe.style.height = `${height}px` + iframe.parentElement?.setAttribute('data-scale', '1') } else { const scale = Math.min( diff --git a/packages/browser/src/client/tester/utils.ts b/packages/browser/src/client/tester/utils.ts index 75751d05bede..a3246b8ff748 100644 --- a/packages/browser/src/client/tester/utils.ts +++ b/packages/browser/src/client/tester/utils.ts @@ -172,9 +172,6 @@ export function getIframeScale(): number { throw new Error(`Cannot find Tester element. This is a bug in Vitest. Please, open a new issue with reproduction.`) } const scaleAttribute = testerUi.getAttribute('data-scale') - if (scaleAttribute === null) { - return 1 - } const scale = Number(scaleAttribute) if (Number.isNaN(scale)) { throw new TypeError(`Cannot parse scale value from Tester element (${scaleAttribute}). This is a bug in Vitest. Please, open a new issue with reproduction.`)