@@ -10,26 +10,36 @@ import type * as Recorder from '../../../front_end/panels/recorder/recorder.js';
1010import {
1111 platform ,
1212 selectOption ,
13- } from '../../shared/helper.js' ;
14- import { getBrowserAndPagesWrappers } from '../../shared/non_hosted_wrappers.js' ;
13+ } from '../../../test/shared/helper.js' ;
14+ import type { DevToolsPage } from '../../e2e_non_hosted/shared/frontend-helper.js' ;
15+ import type { InspectedPage } from '../../e2e_non_hosted/shared/target-helper.js' ;
1516
1617import { openCommandMenu } from './quick_open-helpers.js' ;
1718
1819const RECORDER_CONTROLLER_TAG_NAME = 'devtools-recorder-controller' as const ;
1920const TEST_RECORDING_NAME = 'New Recording' ;
2021const ControlOrMeta = platform === 'mac' ? 'Meta' : 'Control' ;
2122
22- export async function getRecordingController ( devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
23+ export async function record ( devToolsPage : DevToolsPage , inspectedPage : InspectedPage ) {
24+ await inspectedPage . bringToFront ( ) ;
25+ await devToolsPage . bringToFront ( ) ;
26+ await devToolsPage . page . waitForSelector ( 'pierce/.settings' ) ;
27+ await inspectedPage . bringToFront ( ) ;
28+ const element = await inspectedPage . waitForSelector ( 'a[href="recorder2.html"]' ) ;
29+ await element ?. click ( ) ;
30+ await devToolsPage . bringToFront ( ) ;
31+ }
32+
33+ export async function getRecordingController ( devToolsPage : DevToolsPage ) {
2334 return await devToolsPage . waitFor (
2435 RECORDER_CONTROLLER_TAG_NAME ,
2536 ) ;
2637}
2738
28- export async function onRecordingStateChanged ( devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) :
29- Promise < unknown > {
39+ export async function onRecordingStateChanged ( devToolsPage : DevToolsPage ) : Promise < UserFlow > {
3040 const view = await getRecordingController ( devToolsPage ) ;
3141 return await view . evaluate ( el => {
32- return new Promise ( resolve => {
42+ return new Promise < UserFlow > ( resolve => {
3343 el . addEventListener (
3444 'recordingstatechanged' ,
3545 ( event : Event ) => resolve (
@@ -41,8 +51,7 @@ export async function onRecordingStateChanged(devToolsPage = getBrowserAndPagesW
4151 } ) ;
4252}
4353
44- export async function onRecorderAttachedToTarget ( devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) :
45- Promise < unknown > {
54+ export async function onRecorderAttachedToTarget ( devToolsPage : DevToolsPage ) : Promise < unknown > {
4655 return await devToolsPage . evaluate ( ( ) => {
4756 return new Promise ( resolve => {
4857 window . addEventListener ( 'recorderAttachedToTarget' , resolve , {
@@ -52,7 +61,7 @@ export async function onRecorderAttachedToTarget(devToolsPage = getBrowserAndPag
5261 } ) ;
5362}
5463
55- export async function onReplayFinished ( devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) : Promise < unknown > {
64+ export async function onReplayFinished ( devToolsPage : DevToolsPage ) : Promise < unknown > {
5665 const view = await getRecordingController ( devToolsPage ) ;
5766 return await view . evaluate ( el => {
5867 return new Promise ( resolve => {
@@ -61,7 +70,7 @@ export async function onReplayFinished(devToolsPage = getBrowserAndPagesWrappers
6170 } ) ;
6271}
6372
64- export async function enableUntrustedEventMode ( devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
73+ export async function enableUntrustedEventMode ( devToolsPage : DevToolsPage ) {
6574 await devToolsPage . evaluate ( `(async () => {
6675 // TODO: have an explicit UI setting or perhaps a special event to configure this
6776 // instead of having a global setting.
@@ -71,19 +80,15 @@ export async function enableUntrustedEventMode(devToolsPage = getBrowserAndPages
7180}
7281
7382export async function enableAndOpenRecorderPanel (
74- path : string , devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ,
75- inspectedPage = getBrowserAndPagesWrappers ( ) . inspectedPage
76-
77- ) {
83+ path : string , devToolsPage : DevToolsPage , inspectedPage : InspectedPage ) {
7884 await inspectedPage . goToResource ( path ) ;
79- await openCommandMenu ( devToolsPage ) ;
80- await devToolsPage . typeText ( 'Show Recorder' ) ;
81- await devToolsPage . page . keyboard . press ( 'Enter' ) ;
82- await devToolsPage . waitFor ( RECORDER_CONTROLLER_TAG_NAME ) ;
85+ await openRecorderPanel ( devToolsPage ) ;
8386}
8487
85- async function createRecording (
86- name : string , selectorAttribute ?: string , devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
88+ async function createRecording ( name : string , selectorAttribute ?: string , devToolsPage ?: DevToolsPage ) {
89+ if ( ! devToolsPage ) {
90+ throw new Error ( 'DevToolsPage was not provided' ) ;
91+ }
8792 const newRecordingButton = await devToolsPage . waitForAria ( 'Create recording' ) ;
8893 await newRecordingButton . click ( ) ;
8994 const input = await devToolsPage . waitForAria ( 'RECORDING NAME' ) ;
@@ -96,26 +101,30 @@ async function createRecording(
96101 }
97102}
98103
99- export async function createAndStartRecording (
100- name ?: string , selectorAttribute ?: string , devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
104+ export async function createAndStartRecording ( name ?: string , selectorAttribute ?: string , devToolsPage ?: DevToolsPage ) {
105+ if ( ! devToolsPage ) {
106+ throw new Error ( 'DevToolsPage was not provided' ) ;
107+ }
101108 await createRecording ( name ?? TEST_RECORDING_NAME , selectorAttribute , devToolsPage ) ;
102109 const onRecordingStarted = onRecordingStateChanged ( devToolsPage ) ;
103110 await devToolsPage . click ( 'devtools-control-button' ) ;
104111 await devToolsPage . waitFor ( 'devtools-recording-view' ) ;
105112 await onRecordingStarted ;
106113}
107114
108- export async function changeNetworkConditions (
109- condition : string , devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
110- await devToolsPage . page . waitForSelector ( 'pierce/#tab-network ') ;
111- await devToolsPage . click ( 'pierce/#tab-network ') ;
115+ export async function changeNetworkConditions ( condition : string , devToolsPage : DevToolsPage ) {
116+ await openCommandMenu ( devToolsPage ) ;
117+ await devToolsPage . typeText ( 'Show Network ') ;
118+ await devToolsPage . page . keyboard . press ( 'Enter ') ;
112119 await devToolsPage . page . waitForSelector ( 'pierce/select[aria-label="Throttling"]' ) ;
113120 await devToolsPage . page . select ( 'pierce/select[aria-label="Throttling"]' , condition ) ;
114121}
115122
116- export async function openRecorderPanel ( devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
117- await devToolsPage . click ( '[aria-label="Recorder"]' ) ;
118- await devToolsPage . waitFor ( 'devtools-recording-view' ) ;
123+ export async function openRecorderPanel ( devToolsPage : DevToolsPage ) {
124+ await openCommandMenu ( devToolsPage ) ;
125+ await devToolsPage . typeText ( 'Show Recorder' ) ;
126+ await devToolsPage . page . keyboard . press ( 'Enter' ) ;
127+ await devToolsPage . waitFor ( RECORDER_CONTROLLER_TAG_NAME ) ;
119128}
120129
121130interface StartRecordingOptions {
@@ -130,20 +139,22 @@ export async function startRecording(
130139 networkCondition : '' ,
131140 untrustedEvents : false ,
132141 } ,
133- devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ,
142+ devToolsPage : DevToolsPage ,
143+ inspectedPage : InspectedPage ,
144+
134145) {
135146 await devToolsPage . bringToFront ( ) ;
136147 if ( options . networkCondition ) {
137- await changeNetworkConditions ( options . networkCondition ) ;
148+ await changeNetworkConditions ( options . networkCondition , devToolsPage ) ;
138149 }
139- await enableAndOpenRecorderPanel ( path ) ;
150+ await enableAndOpenRecorderPanel ( path , devToolsPage , inspectedPage ) ;
140151 if ( options . untrustedEvents ) {
141- await enableUntrustedEventMode ( ) ;
152+ await enableUntrustedEventMode ( devToolsPage ) ;
142153 }
143- await createAndStartRecording ( TEST_RECORDING_NAME , options . selectorAttribute ) ;
154+ await createAndStartRecording ( TEST_RECORDING_NAME , options . selectorAttribute , devToolsPage ) ;
144155}
145156
146- export async function stopRecording ( devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) : Promise < unknown > {
157+ export async function stopRecording ( devToolsPage : DevToolsPage ) : Promise < UserFlow > {
147158 await devToolsPage . bringToFront ( ) ;
148159 await raf ( devToolsPage . page ) ;
149160 const onRecordingStopped = onRecordingStateChanged ( devToolsPage ) ;
@@ -230,15 +241,14 @@ export const processAndVerifyBaseRecording = (
230241 return parsed ;
231242} ;
232243
233- async function setCode ( flow : string , devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
244+ async function setCode ( flow : string , devToolsPage : DevToolsPage ) {
234245 const view = await getRecordingController ( devToolsPage ) ;
235246 await view . evaluate ( ( el , flow ) => {
236247 el . dispatchEvent ( new CustomEvent ( 'setrecording' , { detail : flow } ) ) ;
237248 } , flow ) ;
238249}
239250
240- export async function clickSelectButtonItem (
241- itemLabel : string , root : string , devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
251+ export async function clickSelectButtonItem ( itemLabel : string , root : string , devToolsPage : DevToolsPage ) {
242252 const selectMenu = await devToolsPage . waitFor ( root ) ;
243253 const selectMenuButton = await devToolsPage . waitFor (
244254 'select' ,
@@ -253,25 +263,29 @@ export async function clickSelectButtonItem(
253263export async function setupRecorderWithScript (
254264 script : UserFlow ,
255265 path = 'recorder/recorder.html' ,
266+ devToolsPage : DevToolsPage ,
267+ inspectedPage : InspectedPage ,
256268 ) : Promise < void > {
257- await enableAndOpenRecorderPanel ( path ) ;
258- await createAndStartRecording ( script . title ) ;
259- await stopRecording ( ) ;
260- await setCode ( JSON . stringify ( script ) ) ;
269+ await enableAndOpenRecorderPanel ( path , devToolsPage , inspectedPage ) ;
270+ await createAndStartRecording ( script . title , undefined , devToolsPage ) ;
271+ await stopRecording ( devToolsPage ) ;
272+ await setCode ( JSON . stringify ( script ) , devToolsPage ) ;
261273}
262274
263275export async function setupRecorderWithScriptAndReplay (
264276 script : UserFlow ,
265277 path = 'recorder/recorder.html' ,
278+ devToolsPage : DevToolsPage ,
279+ inspectedPage : InspectedPage ,
266280 ) : Promise < void > {
267- await setupRecorderWithScript ( script , path ) ;
268- const onceFinished = onReplayFinished ( ) ;
269- await clickSelectButtonItem ( 'Normal (Default)' , 'devtools-replay-section' ) ;
281+ await setupRecorderWithScript ( script , path , devToolsPage , inspectedPage ) ;
282+ const onceFinished = onReplayFinished ( devToolsPage ) ;
283+ await clickSelectButtonItem ( 'Normal (Default)' , 'devtools-replay-section' , devToolsPage ) ;
270284 await onceFinished ;
271285}
272286
273287export async function getCurrentRecording (
274- devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ,
288+ devToolsPage : DevToolsPage ,
275289 ) : Promise < UserFlow > {
276290 await devToolsPage . bringToFront ( ) ;
277291 const controller = await devToolsPage . $ ( RECORDER_CONTROLLER_TAG_NAME ) ;
@@ -283,11 +297,11 @@ export async function getCurrentRecording(
283297
284298export async function startOrStopRecordingShortcut (
285299 execute : 'inspectedPage' | 'devToolsPage' = 'devToolsPage' ,
286- devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ,
287- inspectedPage = getBrowserAndPagesWrappers ( ) . inspectedPage ,
300+ devToolsPage : DevToolsPage ,
301+ inspectedPage : InspectedPage ,
288302) {
289303 const executeOn = execute === 'devToolsPage' ? devToolsPage . page : inspectedPage . page ;
290- const onRecordingStarted = onRecordingStateChanged ( ) ;
304+ const onRecordingStarted = onRecordingStateChanged ( devToolsPage ) ;
291305 await executeOn . bringToFront ( ) ;
292306 await executeOn . keyboard . down ( ControlOrMeta ) ;
293307 await executeOn . keyboard . down ( 'e' ) ;
@@ -298,18 +312,26 @@ export async function startOrStopRecordingShortcut(
298312 return await onRecordingStarted ;
299313}
300314
301- export async function fillCreateRecordingForm ( path : string ) {
302- await enableAndOpenRecorderPanel ( path ) ;
303- await createRecording ( TEST_RECORDING_NAME ) ;
315+ export async function fillCreateRecordingForm (
316+ path : string ,
317+ devToolsPage : DevToolsPage ,
318+ inspectedPage : InspectedPage ,
319+ ) {
320+ await enableAndOpenRecorderPanel ( path , devToolsPage , inspectedPage ) ;
321+ await createRecording ( TEST_RECORDING_NAME , undefined , devToolsPage ) ;
304322}
305323
306- export async function startRecordingViaShortcut ( path : string ) {
307- await enableAndOpenRecorderPanel ( path ) ;
308- await startOrStopRecordingShortcut ( ) ;
324+ export async function startRecordingViaShortcut (
325+ path : string ,
326+ devToolsPage : DevToolsPage ,
327+ inspectedPage : InspectedPage ,
328+ ) {
329+ await enableAndOpenRecorderPanel ( path , devToolsPage , inspectedPage ) ;
330+ await startOrStopRecordingShortcut ( 'devToolsPage' , devToolsPage , inspectedPage ) ;
309331}
310332
311333export async function replayShortcut (
312- devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ,
334+ devToolsPage : DevToolsPage ,
313335) {
314336 await devToolsPage . bringToFront ( ) ;
315337 await devToolsPage . page . keyboard . down ( ControlOrMeta ) ;
@@ -319,7 +341,7 @@ export async function replayShortcut(
319341}
320342
321343export async function toggleCodeView (
322- devToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ,
344+ devToolsPage : DevToolsPage ,
323345) {
324346 await devToolsPage . bringToFront ( ) ;
325347 await devToolsPage . page . keyboard . down ( ControlOrMeta ) ;
0 commit comments