1+ import type { Page } from "playwright"
12import { type BrowserMultiActorScenario , type RuntimeCreateSpec } from "@automattic/wp-codebox-core"
23import { now } from "@automattic/wp-codebox-core/internals"
34import { BrowserArtifactSession } from "./browser-artifact-session.js"
@@ -35,6 +36,7 @@ export async function runBrowserMultiActorScenarioCommand(input: {
3536
3637 try {
3738 const clientEntries : Array < [ string , BrowserMultiActorClient ] > = [ ]
39+ const actorPages : Array < { actor : string ; page : Pick < Page , "goto" > } > = [ ]
3840 // Playground PHP commands share one runtime endpoint, so provision identities
3941 // and install cookies serially before actions begin concurrently.
4042 for ( const actor of scenario . actors ) {
@@ -50,8 +52,10 @@ export async function runBrowserMultiActorScenarioCommand(input: {
5052 const networkTasks : Array < Promise < void > > = [ ]
5153 attachBrowserCaptureListeners ( { captureConsole : captures . has ( "console" ) , captureErrors : captures . has ( "errors" ) , captureNetwork : true , consoleMessages : actorEvidence . console , errors : actorEvidence . errors , network : actorEvidence . network , networkTasks, page } )
5254 clientEntries . push ( [ actor . name , actorClient ( { actor : actor . name , artifacts, captures, context, evidence : actorEvidence , networkTasks, page, scenario, previewOrigin : topology . preview . effectiveOrigin } ) ] )
55+ actorPages . push ( { actor : actor . name , page } )
5356 }
5457 const clients = Object . fromEntries ( clientEntries )
58+ await navigateBrowserMultiActorPages ( actorPages , topology . resolveUrl ( scenario . url ) )
5559 result = await runBrowserMultiActorScenario ( scenario , clients )
5660 } catch ( error ) {
5761 failure = error instanceof Error ? error : new Error ( String ( error ) )
@@ -78,6 +82,20 @@ export async function runBrowserMultiActorScenarioCommand(input: {
7882 return { artifact, output : `${ JSON . stringify ( { command : "wordpress.browser-scenario" , files : artifact . files , summary : artifact . summary , scenario : summary } , null , 2 ) } \n` }
7983}
8084
85+ export async function navigateBrowserMultiActorPages (
86+ actorPages : Array < { actor : string ; page : Pick < Page , "goto" > } > ,
87+ url : string ,
88+ ) : Promise < void > {
89+ await Promise . all ( actorPages . map ( async ( { actor, page } ) => {
90+ try {
91+ await page . goto ( url , { waitUntil : "load" } )
92+ } catch ( error ) {
93+ const message = error instanceof Error ? error . message : String ( error )
94+ throw new Error ( `Actor ${ actor } failed to navigate to ${ url } : ${ message } ` )
95+ }
96+ } ) )
97+ }
98+
8199interface ActorEvidence {
82100 console : Record < string , unknown > [ ]
83101 errors : BrowserProbeErrorRecord [ ]
0 commit comments