44
55import type * as puppeteer from 'puppeteer-core' ;
66
7+ import type { DevToolsPage } from '../../e2e_non_hosted/shared/frontend-helper.js' ;
78import {
89 $ ,
9- $$ ,
1010 click ,
11- getBrowserAndPages ,
1211 goToResource ,
1312 setCheckBox ,
1413 typeText ,
1514 waitFor ,
16- waitForAria ,
1715 waitForFunction ,
1816} from '../../shared/helper.js' ;
17+ import { getBrowserAndPagesWrappers } from '../../shared/non_hosted_wrappers.js' ;
1918
2019import { veImpression } from './visual-logging-helpers.js' ;
2120
2221const REQUEST_LIST_SELECTOR = '.network-log-grid tbody' ;
2322
24- export async function waitForNetworkTab ( ) : Promise < void > {
23+ export async function waitForNetworkTab ( devToolsPage : DevToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) :
24+ Promise < void > {
2525 // Make sure the network tab is shown on the screen
26- await waitFor ( '.network-log-grid' ) ;
26+ await devToolsPage . waitFor ( '.network-log-grid' ) ;
2727}
2828
29- export async function openNetworkTab ( ) : Promise < void > {
30- await click ( '#tab-network' ) ;
31- await waitForNetworkTab ( ) ;
29+ export async function openNetworkTab ( devToolsPage : DevToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) :
30+ Promise < void > {
31+ await devToolsPage . click ( '#tab-network' ) ;
32+ await waitForNetworkTab ( devToolsPage ) ;
3233}
3334
3435/**
@@ -44,16 +45,17 @@ export async function navigateToNetworkTab(testName: string) {
4445 * @param numberOfRequests The expected number of requests to wait for.
4546 * @param selector Optional. The selector to use to get the list of requests.
4647 */
47- export async function waitForSomeRequestsToAppear ( numberOfRequests : number ) {
48- await waitForFunction ( async ( ) => {
49- const requests = await getAllRequestNames ( ) ;
48+ export async function waitForSomeRequestsToAppear (
49+ numberOfRequests : number , devToolsPage : DevToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
50+ await devToolsPage . waitForFunction ( async ( ) => {
51+ const requests = await getAllRequestNames ( devToolsPage ) ;
5052 return requests . length >= numberOfRequests && Boolean ( requests . map ( name => name ? name . trim ( ) : '' ) . join ( '' ) ) ;
5153 } ) ;
5254}
5355
54- export async function getAllRequestNames ( ) {
55- const requests = await $$ ( REQUEST_LIST_SELECTOR + ' .name-column' ) ;
56- return await Promise . all ( requests . map ( request => request . evaluate ( r => r . childNodes [ 2 ] . textContent ) ) ) ;
56+ export async function getAllRequestNames ( devToolsPage : DevToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
57+ const requests = await devToolsPage . $$ ( REQUEST_LIST_SELECTOR + ' .name-column' ) ;
58+ return await Promise . all ( requests . map ( request => request . evaluate ( r => r . deepInnerText ( ) . split ( '\n' ) [ 0 ] ) ) ) ;
5759}
5860
5961export async function getNumberOfRequests ( ) {
@@ -70,31 +72,17 @@ export async function getSelectedRequestName() {
7072 } ) ;
7173}
7274
73- export async function selectRequestByName ( name : string , clickOptions ?: puppeteer . ClickOptions ) {
74- const selector = REQUEST_LIST_SELECTOR + ' .name-column' ;
75- const { frontend} = getBrowserAndPages ( ) ;
76-
77- // Finding he click position is done in a single frontend.evaluate call
78- // to make sure the element still exists after finding the element.
79- // If this were done outside of evaluate code, it would be possible for an
80- // element to be removed from the dom between the $$(.selector) call and the
81- // click(element) call.
82- const rect = await frontend . evaluate ( ( name , selector ) => {
83- const elements = document . querySelectorAll ( selector ) ;
84- for ( const element of elements ) {
85- if ( element . childNodes [ 2 ] . textContent === name ) {
86- const { left, top, width, height} = element . getBoundingClientRect ( ) ;
87- return { left, top, width, height} ;
88- }
89- }
90- return null ;
91- } , name , selector ) ;
92-
93- if ( rect ) {
94- const x = rect . left + rect . width * 0.5 ;
95- const y = rect . top + rect . height * 0.5 ;
96- await frontend . mouse . click ( x , y , clickOptions ) ;
75+ export async function selectRequestByName (
76+ name : string , clickOptions ?: puppeteer . ClickOptions ,
77+ devToolsPage : DevToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) {
78+ const requests = await devToolsPage . $$ ( REQUEST_LIST_SELECTOR + ' .name-column' ) ;
79+ const names = await Promise . all ( requests . map ( request => request . evaluate ( r => r . deepInnerText ( ) . split ( '\n' ) [ 0 ] ) ) ) ;
80+ const index = names . findIndex ( n => n === name ) ;
81+ if ( index === - 1 ) {
82+ assert . fail ( `Request "${ name } " not found.` ) ;
9783 }
84+ const request = requests [ index ] ;
85+ await request . click ( clickOptions ) ;
9886}
9987
10088export async function waitForSelectedRequestChange ( initialRequestName : string | null ) {
@@ -108,8 +96,9 @@ export async function setPersistLog(persist: boolean) {
10896 await setCheckBox ( '[title="Do not clear log on page reload / navigation"]' , persist ) ;
10997}
11098
111- export async function setCacheDisabled ( disabled : boolean ) : Promise < void > {
112- await setCheckBox ( '[title^="Disable cache"]' , disabled ) ;
99+ export async function setCacheDisabled (
100+ disabled : boolean , devToolsPage : DevToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) : Promise < void > {
101+ await devToolsPage . setCheckBox ( '[title^="Disable cache"]' , disabled ) ;
113102}
114103
115104export async function setInvert ( invert : boolean ) {
@@ -126,11 +115,12 @@ export async function clearTimeWindow(): Promise<void> {
126115 await overviewGridCursorArea . click ( { count : 2 } ) ;
127116}
128117
129- export async function setTextFilter ( text : string ) : Promise < void > {
130- const toolbarHandle = await waitFor ( '.text-filter' ) ;
131- const input = await waitForAria ( 'Filter' , toolbarHandle ) ;
118+ export async function setTextFilter (
119+ text : string , devToolsPage : DevToolsPage = getBrowserAndPagesWrappers ( ) . devToolsPage ) : Promise < void > {
120+ const toolbarHandle = await devToolsPage . waitFor ( '.text-filter' ) ;
121+ const input = await devToolsPage . waitForAria ( 'Filter' , toolbarHandle ) ;
132122 await input . focus ( ) ;
133- await typeText ( text ) ;
123+ await typeText ( text , devToolsPage ) ;
134124}
135125
136126export async function getTextFilterContent ( ) : Promise < string > {
0 commit comments