diff --git a/packages/html-reporter/src/chip.css b/packages/html-reporter/src/chip.css index 1b40275166d7b..66d1ea3d9dae0 100644 --- a/packages/html-reporter/src/chip.css +++ b/packages/html-reporter/src/chip.css @@ -27,6 +27,11 @@ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; + user-select: none; +} + +.chip-header-allow-selection { + user-select: text; } .chip-header.expanded-false { diff --git a/packages/html-reporter/src/common.css b/packages/html-reporter/src/common.css index 63ad3cd70fa04..bf1926a6cc733 100644 --- a/packages/html-reporter/src/common.css +++ b/packages/html-reporter/src/common.css @@ -203,7 +203,7 @@ article, aside, details, figcaption, figure, footer, header, main, menu, nav, se flex: none; position: relative; float: left; - padding: 5px 10px; + padding: 5px 8px; font-weight: 500; line-height: 20px; color: var(--color-fg-default); @@ -228,6 +228,14 @@ article, aside, details, figcaption, figure, footer, header, main, menu, nav, se margin-left: -1px; } +.subnav-item .octicon { + margin-right: 8px; +} + +.subnav-item-label { + margin-right: 8px; +} + .counter { display: inline-block; min-width: 20px; @@ -293,7 +301,6 @@ article, aside, details, figcaption, figure, footer, header, main, menu, nav, se } .subnav-item { - padding: 5px 3px; border: none; } diff --git a/packages/html-reporter/src/headerView.css b/packages/html-reporter/src/headerView.css index b9331ab89f273..f8ef79e44f715 100644 --- a/packages/html-reporter/src/headerView.css +++ b/packages/html-reporter/src/headerView.css @@ -24,6 +24,7 @@ .header-view div { flex-shrink: 0; + flex-wrap: wrap; } .header-superheader { diff --git a/packages/html-reporter/src/headerView.spec.tsx b/packages/html-reporter/src/headerView.spec.tsx index 2276d62cc1c8b..1ad79683ab18b 100644 --- a/packages/html-reporter/src/headerView.spec.tsx +++ b/packages/html-reporter/src/headerView.spec.tsx @@ -38,8 +38,8 @@ test('should render counters', async ({ mount }) => { await expect(component.locator('a', { hasText: 'Skipped' }).locator('.counter')).toHaveText('10'); await expect(component).toMatchAriaSnapshot(` - navigation: - - link "All 90" - - text: Passed 42 Failed 31 Flaky 17 Skipped 10 + - link "All90" + - text: Passed42 Failed31 Flaky17 Skipped10 `); }); diff --git a/packages/html-reporter/src/headerView.tsx b/packages/html-reporter/src/headerView.tsx index c0804a6681762..f44b4daf87ca6 100644 --- a/packages/html-reporter/src/headerView.tsx +++ b/packages/html-reporter/src/headerView.tsx @@ -85,19 +85,27 @@ const StatsNavView: React.FC<{ const q = searchParams.get('q')?.toString() || ''; return ; }; diff --git a/packages/html-reporter/src/icons.tsx b/packages/html-reporter/src/icons.tsx index ffe6a08fcf015..a7368c5f4a30a 100644 --- a/packages/html-reporter/src/icons.tsx +++ b/packages/html-reporter/src/icons.tsx @@ -65,6 +65,12 @@ export const clock = () => { ; }; +export const skip = () => { + return ; +}; + export const blank = () => { return ; }; diff --git a/packages/html-reporter/src/metadataView.css b/packages/html-reporter/src/metadataView.css index d62635909e778..b91a5e830c7e3 100644 --- a/packages/html-reporter/src/metadataView.css +++ b/packages/html-reporter/src/metadataView.css @@ -17,14 +17,18 @@ .metadata-toggle { cursor: pointer; user-select: none; - margin-left: 8px; color: var(--color-fg-default); } +.metadata-toggle-second-line { + margin-top: 8px; + margin-left: 8px; +} + .metadata-view { border: 1px solid var(--color-border-default); border-radius: 6px; - margin-top: 8px; + margin-top: 12px; } .metadata-view .metadata-section { diff --git a/packages/html-reporter/src/statusIcon.tsx b/packages/html-reporter/src/statusIcon.tsx index 155f14041bcc3..39837955aecb7 100644 --- a/packages/html-reporter/src/statusIcon.tsx +++ b/packages/html-reporter/src/statusIcon.tsx @@ -32,6 +32,6 @@ export function statusIcon(status: 'failed' | 'timedOut' | 'skipped' | 'passed' return icons.warning(); case 'skipped': case 'interrupted': - return icons.blank(); + return icons.skip(); } } diff --git a/packages/html-reporter/src/testFileView.css b/packages/html-reporter/src/testFileView.css index c071781ce17cd..4c2b11abae955 100644 --- a/packages/html-reporter/src/testFileView.css +++ b/packages/html-reporter/src/testFileView.css @@ -41,6 +41,21 @@ align-items: center; } +.test-file-details-row-items { + display: flex; + height: 16px; +} + +.test-file-details-row-items > .link-badge { + /* Align badges */ + margin-top: -2px; +} + +.test-file-details-row-items > .trace-link { + /* Center in row */ + margin-top: -4px; +} + .test-file-path { text-overflow: ellipsis; overflow: hidden; @@ -62,6 +77,11 @@ .test-file-header-info { display: flex; align-items: center; - gap: 8px; + gap: 4px 8px; color: var(--color-fg-muted); +} + +.test-file-header-br { + flex-basis: 100%; + height: 0; } \ No newline at end of file diff --git a/packages/html-reporter/src/testFileView.tsx b/packages/html-reporter/src/testFileView.tsx index ed26b1fc5f984..49af0f4b10f43 100644 --- a/packages/html-reporter/src/testFileView.tsx +++ b/packages/html-reporter/src/testFileView.tsx @@ -37,7 +37,7 @@ export const TestFileView: React.FC setFileExpanded(file.fileId, expanded))} - header={ + header={ {file.fileName} }> {file.tests.map(test => @@ -59,12 +59,14 @@ export const TestFileView: React.FC{msToString(test.duration)}
- - {test.location.file}:{test.location.line} - - {imageDiffBadge(test)} - {videoBadge(test)} - +
+ + {test.location.file}:{test.location.line} + + {imageDiffBadge(test)} + {videoBadge(test)} + +
)} diff --git a/packages/html-reporter/src/testFilesView.tsx b/packages/html-reporter/src/testFilesView.tsx index 527deadadb965..efffa58a955f1 100644 --- a/packages/html-reporter/src/testFilesView.tsx +++ b/packages/html-reporter/src/testFilesView.tsx @@ -24,6 +24,7 @@ import { CodeSnippet } from './testErrorView'; import * as icons from './icons'; import { isMetadataEmpty, MetadataView } from './metadataView'; import { HeaderView } from './headerView'; +import { clsx } from '@web/uiUtils'; export const TestFilesView: React.FC<{ tests: TestFileSummary[], @@ -71,9 +72,19 @@ export const TestFilesHeader: React.FC<{ if (!report) return null; + const showProject = report.projectNames.length === 1 && !!report.projectNames[0]; + const isMetadataInTopLine = !showProject && !filteredStats; + + const metadataToggleButton = !isMetadataEmpty(report.metadata) && ( +
+ {metadataVisible ? icons.downArrow() : icons.rightArrow()}Metadata +
+ ); + const leftSuperHeader =
- {report.projectNames.length === 1 && !!report.projectNames[0] &&
Project: {report.projectNames[0]}
} + {showProject &&
Project: {report.projectNames[0]}
} {filteredStats &&
Filtered: {filteredStats.total} {!!filteredStats.total && ('(' + msToString(filteredStats.duration) + ')')}
} + {isMetadataInTopLine && metadataToggleButton}
; const rightSuperHeader = <> @@ -83,9 +94,7 @@ export const TestFilesHeader: React.FC<{ return <> - {!isMetadataEmpty(report.metadata) &&
- {metadataVisible ? icons.downArrow() : icons.rightArrow()}Metadata -
} + {!isMetadataInTopLine && metadataToggleButton} {metadataVisible && } {!!report.errors.length && {report.errors.map((error, index) => )} diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index 865802398a037..ec4d1156e779b 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -358,14 +358,6 @@ scheme.LocalUtilsTraceDiscardedParams = tObject({ stacksId: tString, }); scheme.LocalUtilsTraceDiscardedResult = tOptional(tObject({})); -scheme.LocalUtilsGlobToRegexParams = tObject({ - glob: tString, - baseURL: tOptional(tString), - webSocketUrl: tOptional(tBoolean), -}); -scheme.LocalUtilsGlobToRegexResult = tObject({ - regex: tString, -}); scheme.RootInitializer = tOptional(tObject({})); scheme.RootInitializeParams = tObject({ sdkLanguage: tType('SDKLanguage'), @@ -464,12 +456,6 @@ scheme.DebugControllerSetReportStateChangedParams = tObject({ enabled: tBoolean, }); scheme.DebugControllerSetReportStateChangedResult = tOptional(tObject({})); -scheme.DebugControllerResetForReuseParams = tOptional(tObject({})); -scheme.DebugControllerResetForReuseResult = tOptional(tObject({})); -scheme.DebugControllerNavigateParams = tObject({ - url: tString, -}); -scheme.DebugControllerNavigateResult = tOptional(tObject({})); scheme.DebugControllerSetRecorderModeParams = tObject({ mode: tEnum(['inspecting', 'recording', 'none']), testIdAttributeName: tOptional(tString), @@ -486,8 +472,6 @@ scheme.DebugControllerResumeParams = tOptional(tObject({})); scheme.DebugControllerResumeResult = tOptional(tObject({})); scheme.DebugControllerKillParams = tOptional(tObject({})); scheme.DebugControllerKillResult = tOptional(tObject({})); -scheme.DebugControllerCloseAllBrowsersParams = tOptional(tObject({})); -scheme.DebugControllerCloseAllBrowsersResult = tOptional(tObject({})); scheme.SocksSupportInitializer = tOptional(tObject({})); scheme.SocksSupportSocksRequestedEvent = tObject({ uid: tString, diff --git a/packages/playwright-core/src/server/chromium/videoRecorder.ts b/packages/playwright-core/src/server/chromium/videoRecorder.ts index 59dc50c837c07..0e4c25d8d94be 100644 --- a/packages/playwright-core/src/server/chromium/videoRecorder.ts +++ b/packages/playwright-core/src/server/chromium/videoRecorder.ts @@ -14,13 +14,10 @@ * limitations under the License. */ -import { assert, monotonicTime } from '../../utils'; -import { serverSideCallMetadata } from '../instrumentation'; +import { assert, debugLogger, monotonicTime } from '../../utils'; import { Page } from '../page'; import { launchProcess } from '../utils/processLauncher'; -import { ProgressController } from '../progress'; -import type { Progress } from '../progress'; import type * as types from '../types'; import type { ChildProcess } from 'child_process'; @@ -33,7 +30,6 @@ export class VideoRecorder { private _lastFrameTimestamp: number = 0; private _lastFrameBuffer: Buffer | null = null; private _lastWriteTimestamp: number = 0; - private readonly _progress: Progress; private _frameQueue: Buffer[] = []; private _isStopped = false; private _ffmpegPath: string; @@ -42,18 +38,12 @@ export class VideoRecorder { if (!options.outputFile.endsWith('.webm')) throw new Error('File must have .webm extension'); - const controller = new ProgressController(serverSideCallMetadata(), page); - controller.setLogName('browser'); - return await controller.run(async progress => { - const recorder = new VideoRecorder(page, ffmpegPath, progress); - progress.cleanupWhenAborted(() => recorder.stop()); - await recorder._launch(options); - return recorder; - }); + const recorder = new VideoRecorder(page, ffmpegPath); + await recorder._launch(options); + return recorder; } - private constructor(page: Page, ffmpegPath: string, progress: Progress) { - this._progress = progress; + private constructor(page: Page, ffmpegPath: string) { this._ffmpegPath = ffmpegPath; page.on(Page.Events.ScreencastFrame, frame => this.writeFrame(frame.buffer, frame.frameSwapWallTime / 1000)); } @@ -102,27 +92,26 @@ export class VideoRecorder { const h = options.height; const args = `-loglevel error -f image2pipe -avioflags direct -fpsprobesize 0 -probesize 32 -analyzeduration 0 -c:v mjpeg -i pipe:0 -y -an -r ${fps} -c:v vp8 -qmin 0 -qmax 50 -crf 8 -deadline realtime -speed 8 -b:v 1M -threads 1 -vf pad=${w}:${h}:0:0:gray,crop=${w}:${h}:0:0`.split(' '); args.push(options.outputFile); - const progress = this._progress; const { launchedProcess, gracefullyClose } = await launchProcess({ command: this._ffmpegPath, args, stdio: 'stdin', - log: (message: string) => progress.log(message), + log: (message: string) => debugLogger.log('browser', message), tempDirectories: [], attemptToGracefullyClose: async () => { - progress.log('Closing stdin...'); + debugLogger.log('browser', 'Closing stdin...'); launchedProcess.stdin!.end(); }, onExit: (exitCode, signal) => { - progress.log(`ffmpeg onkill exitCode=${exitCode} signal=${signal}`); + debugLogger.log('browser', `ffmpeg onkill exitCode=${exitCode} signal=${signal}`); }, }); launchedProcess.stdin!.on('finish', () => { - progress.log('ffmpeg finished input.'); + debugLogger.log('browser', 'ffmpeg finished input.'); }); launchedProcess.stdin!.on('error', () => { - progress.log('ffmpeg error.'); + debugLogger.log('browser', 'ffmpeg error.'); }); this._process = launchedProcess; this._gracefullyClose = gracefullyClose; @@ -154,7 +143,7 @@ export class VideoRecorder { private async _sendFrame(frame: Buffer) { return new Promise(f => this._process!.stdin!.write(frame, f)).then(error => { if (error) - this._progress.log(`ffmpeg failed to write: ${String(error)}`); + debugLogger.log('browser', `ffmpeg failed to write: ${String(error)}`); }); } diff --git a/packages/playwright-core/src/server/debugController.ts b/packages/playwright-core/src/server/debugController.ts index 0ddf54c8f17f4..89b133d99701b 100644 --- a/packages/playwright-core/src/server/debugController.ts +++ b/packages/playwright-core/src/server/debugController.ts @@ -26,7 +26,6 @@ import { collapseActions } from './recorder/recorderUtils'; import { JavaScriptLanguageGenerator } from './codegen/javascript'; import type { Language } from '../utils'; -import type { Browser } from './browser'; import type { BrowserContext } from './browserContext'; import type { InstrumentationListener } from './instrumentation'; import type { Playwright } from './playwright'; @@ -74,19 +73,6 @@ export class DebugController extends SdkObject { } } - async resetForReuse(progress: Progress) { - const contexts = new Set(); - for (const page of this._playwright.allPages()) - contexts.add(page.browserContext); - for (const context of contexts) - await context.resetForReuse(progress, null); - } - - async navigate(progress: Progress, url: string) { - for (const p of this._playwright.allPages()) - await p.mainFrame().goto(progress, url); - } - async setRecorderMode(progress: Progress, params: { mode: Mode, testIdAttributeName?: string }) { await progress.race(this._closeBrowsersWithoutPages()); @@ -137,11 +123,7 @@ export class DebugController extends SdkObject { for (const recorder of await progress.race(this._allRecorders())) recorder.hideHighlightedSelector(); // Hide all locator.highlight highlights. - await this._playwright.hideHighlight(); - } - - allBrowsers(): Browser[] { - return [...this._playwright.allBrowsers()]; + await Promise.all(this._playwright.allPages().map(p => p.hideHighlight().catch(() => {}))); } async resume(progress: Progress) { @@ -153,10 +135,6 @@ export class DebugController extends SdkObject { gracefullyProcessExitDoNotHang(0); } - async closeAllBrowsers() { - await Promise.all(this.allBrowsers().map(browser => browser.close({ reason: 'Close all browsers requested' }))); - } - private _emitSnapshot(initial: boolean) { const pageCount = this._playwright.allPages().length; if (initial && !pageCount) diff --git a/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts b/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts index cc55f9e28287a..595535925741f 100644 --- a/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts @@ -58,14 +58,6 @@ export class DebugControllerDispatcher extends Dispatcher transport.close()); return { pipe, headers: transport.headers }; } - - async globToRegex(params: channels.LocalUtilsGlobToRegexParams, progress: Progress): Promise { - const regex = resolveGlobToRegexPattern(params.baseURL, params.glob, params.webSocketUrl); - return { regex }; - } } async function urlToWSEndpoint(progress: Progress, endpointURL: string): Promise { diff --git a/packages/playwright-core/src/server/playwright.ts b/packages/playwright-core/src/server/playwright.ts index a4381b1d3c837..c30fb54ef89da 100644 --- a/packages/playwright-core/src/server/playwright.ts +++ b/packages/playwright-core/src/server/playwright.ts @@ -74,10 +74,6 @@ export class Playwright extends SdkObject { this.debugController = new DebugController(this); } - async hideHighlight() { - await Promise.all([...this._allPages].map(p => p.hideHighlight().catch(() => {}))); - } - allBrowsers(): Browser[] { return [...this._allBrowsers]; } diff --git a/packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts b/packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts index 8354f6f46d9c8..ce1be44af818d 100644 --- a/packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts +++ b/packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts @@ -32,19 +32,15 @@ export const methodMetainfo = new Map[] = []; - if (!config.configCLIOverrides.preserveOutputDir && !process.env.PW_TEST_NO_REMOVE_OUTPUT_DIRS) + if (!config.configCLIOverrides.preserveOutputDir) tasks.push(createRemoveOutputDirsTask()); tasks.push( ...createPluginSetupTasks(config), diff --git a/packages/protocol/src/channels.d.ts b/packages/protocol/src/channels.d.ts index ea9ab4b2f17a2..73017cb438910 100644 --- a/packages/protocol/src/channels.d.ts +++ b/packages/protocol/src/channels.d.ts @@ -485,7 +485,6 @@ export interface LocalUtilsChannel extends LocalUtilsEventTarget, Channel { tracingStarted(params: LocalUtilsTracingStartedParams, progress?: Progress): Promise; addStackToTracingNoReply(params: LocalUtilsAddStackToTracingNoReplyParams, progress?: Progress): Promise; traceDiscarded(params: LocalUtilsTraceDiscardedParams, progress?: Progress): Promise; - globToRegex(params: LocalUtilsGlobToRegexParams, progress?: Progress): Promise; } export type LocalUtilsZipParams = { zipFile: string, @@ -584,18 +583,6 @@ export type LocalUtilsTraceDiscardedOptions = { }; export type LocalUtilsTraceDiscardedResult = void; -export type LocalUtilsGlobToRegexParams = { - glob: string, - baseURL?: string, - webSocketUrl?: boolean, -}; -export type LocalUtilsGlobToRegexOptions = { - baseURL?: string, - webSocketUrl?: boolean, -}; -export type LocalUtilsGlobToRegexResult = { - regex: string, -}; export interface LocalUtilsEvents { } @@ -739,14 +726,11 @@ export interface DebugControllerChannel extends DebugControllerEventTarget, Chan _type_DebugController: boolean; initialize(params: DebugControllerInitializeParams, progress?: Progress): Promise; setReportStateChanged(params: DebugControllerSetReportStateChangedParams, progress?: Progress): Promise; - resetForReuse(params?: DebugControllerResetForReuseParams, progress?: Progress): Promise; - navigate(params: DebugControllerNavigateParams, progress?: Progress): Promise; setRecorderMode(params: DebugControllerSetRecorderModeParams, progress?: Progress): Promise; highlight(params: DebugControllerHighlightParams, progress?: Progress): Promise; hideHighlight(params?: DebugControllerHideHighlightParams, progress?: Progress): Promise; resume(params?: DebugControllerResumeParams, progress?: Progress): Promise; kill(params?: DebugControllerKillParams, progress?: Progress): Promise; - closeAllBrowsers(params?: DebugControllerCloseAllBrowsersParams, progress?: Progress): Promise; } export type DebugControllerInspectRequestedEvent = { selector: string, @@ -783,16 +767,6 @@ export type DebugControllerSetReportStateChangedOptions = { }; export type DebugControllerSetReportStateChangedResult = void; -export type DebugControllerResetForReuseParams = {}; -export type DebugControllerResetForReuseOptions = {}; -export type DebugControllerResetForReuseResult = void; -export type DebugControllerNavigateParams = { - url: string, -}; -export type DebugControllerNavigateOptions = { - -}; -export type DebugControllerNavigateResult = void; export type DebugControllerSetRecorderModeParams = { mode: 'inspecting' | 'recording' | 'none', testIdAttributeName?: string, @@ -819,9 +793,6 @@ export type DebugControllerResumeResult = void; export type DebugControllerKillParams = {}; export type DebugControllerKillOptions = {}; export type DebugControllerKillResult = void; -export type DebugControllerCloseAllBrowsersParams = {}; -export type DebugControllerCloseAllBrowsersOptions = {}; -export type DebugControllerCloseAllBrowsersResult = void; export interface DebugControllerEvents { 'inspectRequested': DebugControllerInspectRequestedEvent; diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index e59829c637995..4a5b2910fb2f6 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -765,14 +765,6 @@ LocalUtils: parameters: stacksId: string - globToRegex: - internal: true - parameters: - glob: string - baseURL: string? - webSocketUrl: boolean? - returns: - regex: string Root: type: interface @@ -892,14 +884,6 @@ DebugController: parameters: enabled: boolean - resetForReuse: - internal: true - - navigate: - internal: true - parameters: - url: string - setRecorderMode: internal: true parameters: @@ -926,9 +910,6 @@ DebugController: kill: internal: true - closeAllBrowsers: - internal: true - events: inspectRequested: parameters: @@ -1573,7 +1554,7 @@ Page: source: string close: - title: Close + title: Close page parameters: runBeforeUnload: boolean? reason: string? diff --git a/tests/library/client-certificates.spec.ts b/tests/library/client-certificates.spec.ts index a3ebbb83a2bff..61b6580e86cc2 100644 --- a/tests/library/client-certificates.spec.ts +++ b/tests/library/client-certificates.spec.ts @@ -371,7 +371,8 @@ test.describe('browser', () => { await page.close(); }); - test('should pass with matching certificates and when a http proxy is used from env', async ({ browser, startCCServer, asset, browserName, proxyServer, isMac }) => { + test('should pass with matching certificates and when a http proxy is used from env', async ({ mode, browser, startCCServer, asset, browserName, proxyServer, isMac }) => { + test.skip(mode !== 'default', 'Out of process transport does not allow us to set env vars dynamically'); process.env.HTTPS_PROXY = `http://localhost:${proxyServer.PORT}`; const serverURL = await startCCServer({ useFakeLocalhost: browserName === 'webkit' && isMac }); proxyServer.forwardTo(parseInt(new URL(serverURL).port, 10), { allowConnectRequests: true }); diff --git a/tests/library/debug-controller.spec.ts b/tests/library/debug-controller.spec.ts index 3fe102446d4e1..309e13fe088c4 100644 --- a/tests/library/debug-controller.spec.ts +++ b/tests/library/debug-controller.spec.ts @@ -135,22 +135,12 @@ test('should report pages', async ({ backend, connectedBrowser }) => { ]); }); -test('should navigate all', async ({ backend, connectedBrowser }) => { - const context = await connectedBrowser.newContextForReuse(); - const page1 = await context.newPage(); - const page2 = await context.newPage(); - - await backend.navigate({ url: 'data:text/plain,Hello world' }); - - expect(await page1.evaluate(() => window.location.href)).toBe('data:text/plain,Hello world'); - expect(await page2.evaluate(() => window.location.href)).toBe('data:text/plain,Hello world'); -}); - test('should reset for reuse', async ({ backend, connectedBrowser }) => { const context = await connectedBrowser.newContextForReuse(); const page1 = await context.newPage(); const page2 = await context.newPage(); - await backend.navigate({ url: 'data:text/plain,Hello world' }); + await page1.goto('data:text/plain,Hello world'); + await page2.goto('data:text/plain,Hello world'); const context2 = await connectedBrowser.newContextForReuse(); expect(context2.pages().length).toBe(1); @@ -167,7 +157,8 @@ test('should highlight all', async ({ backend, connectedBrowser }) => { const context = await connectedBrowser.newContextForReuse(); const page1 = await context.newPage(); const page2 = await context.newPage(); - await backend.navigate({ url: 'data:text/html,' }); + await page1.goto('data:text/html,'); + await page2.goto('data:text/html,'); await backend.highlight({ selector: 'button' }); await expect(page1.getByText('locator(\'button\')')).toBeVisible(); await expect(page2.getByText('locator(\'button\')')).toBeVisible(); @@ -275,7 +266,7 @@ test('should highlight inside iframe', async ({ backend, connectedBrowser }, tes const context = await connectedBrowser.newContextForReuse(); const page = await context.newPage(); - await backend.navigate({ url: `data:text/html,
bar