@@ -227,17 +227,18 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
227
227
return point ;
228
228
}
229
229
230
- async _retryPointerAction ( action : ( point : types . Point ) => Promise < void > , options : PointerActionOptions & types . PointerActionWaitOptions & types . NavigatingActionWaitOptions = { } ) : Promise < void > {
230
+ async _retryPointerAction ( actionName : string , action : ( point : types . Point ) => Promise < void > , options : PointerActionOptions & types . PointerActionWaitOptions & types . NavigatingActionWaitOptions = { } ) : Promise < void > {
231
+ this . _page . _log ( inputLog , `elementHandle.${ actionName } ()` ) ;
231
232
const deadline = this . _page . _timeoutSettings . computeDeadline ( options ) ;
232
233
while ( ! helper . isPastDeadline ( deadline ) ) {
233
- const result = await this . _performPointerAction ( action , deadline , options ) ;
234
+ const result = await this . _performPointerAction ( actionName , action , deadline , options ) ;
234
235
if ( result === 'done' )
235
236
return ;
236
237
}
237
- throw new TimeoutError ( `waiting for element to receive pointer events failed: timeout exceeded` ) ;
238
+ throw new TimeoutError ( `waiting for element to receive pointer events failed: timeout exceeded. Re-run with the DEBUG=pw:input env variable to see the debug log. ` ) ;
238
239
}
239
240
240
- async _performPointerAction ( action : ( point : types . Point ) => Promise < void > , deadline : number , options : PointerActionOptions & types . PointerActionWaitOptions & types . NavigatingActionWaitOptions = { } ) : Promise < 'done' | 'retry' > {
241
+ async _performPointerAction ( actionName : string , action : ( point : types . Point ) => Promise < void > , deadline : number , options : PointerActionOptions & types . PointerActionWaitOptions & types . NavigatingActionWaitOptions = { } ) : Promise < 'done' | 'retry' > {
241
242
const { force = false , position } = options ;
242
243
if ( ! force )
243
244
await this . _waitForDisplayedAtStablePosition ( deadline ) ;
@@ -271,10 +272,10 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
271
272
let restoreModifiers : input . Modifier [ ] | undefined ;
272
273
if ( options && options . modifiers )
273
274
restoreModifiers = await this . _page . keyboard . _ensureModifiers ( options . modifiers ) ;
274
- this . _page . _log ( inputLog , ' performing input action...' ) ;
275
+ this . _page . _log ( inputLog , ` performing " ${ actionName } " action...` ) ;
275
276
await action ( point ) ;
276
- this . _page . _log ( inputLog , ' ...input action done' ) ;
277
- this . _page . _log ( inputLog , 'waiting for navigations to finish...' ) ;
277
+ this . _page . _log ( inputLog , ` ... " ${ actionName } " action done` ) ;
278
+ this . _page . _log ( inputLog , 'waiting for scheduled navigations to finish...' ) ;
278
279
await this . _page . _delegate . setActivityPaused ( false ) ;
279
280
paused = false ;
280
281
if ( restoreModifiers )
@@ -290,18 +291,19 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
290
291
}
291
292
292
293
hover ( options ?: PointerActionOptions & types . PointerActionWaitOptions ) : Promise < void > {
293
- return this . _retryPointerAction ( point => this . _page . mouse . move ( point . x , point . y ) , options ) ;
294
+ return this . _retryPointerAction ( 'hover' , point => this . _page . mouse . move ( point . x , point . y ) , options ) ;
294
295
}
295
296
296
297
click ( options ?: ClickOptions & types . PointerActionWaitOptions & types . NavigatingActionWaitOptions ) : Promise < void > {
297
- return this . _retryPointerAction ( point => this . _page . mouse . click ( point . x , point . y , options ) , options ) ;
298
+ return this . _retryPointerAction ( 'click' , point => this . _page . mouse . click ( point . x , point . y , options ) , options ) ;
298
299
}
299
300
300
301
dblclick ( options ?: MultiClickOptions & types . PointerActionWaitOptions & types . NavigatingActionWaitOptions ) : Promise < void > {
301
- return this . _retryPointerAction ( point => this . _page . mouse . dblclick ( point . x , point . y , options ) , options ) ;
302
+ return this . _retryPointerAction ( 'dblclick' , point => this . _page . mouse . dblclick ( point . x , point . y , options ) , options ) ;
302
303
}
303
304
304
305
async selectOption ( values : string | ElementHandle | types . SelectOption | string [ ] | ElementHandle [ ] | types . SelectOption [ ] , options ?: types . NavigatingActionWaitOptions ) : Promise < string [ ] > {
306
+ this . _page . _log ( inputLog , `elementHandle.selectOption(%s)` , values ) ;
305
307
const deadline = this . _page . _timeoutSettings . computeDeadline ( options ) ;
306
308
let vals : string [ ] | ElementHandle [ ] | types . SelectOption [ ] ;
307
309
if ( ! Array . isArray ( values ) )
@@ -326,6 +328,7 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
326
328
}
327
329
328
330
async fill ( value : string , options ?: types . NavigatingActionWaitOptions ) : Promise < void > {
331
+ this . _page . _log ( inputLog , `elementHandle.fill(${ value } )` ) ;
329
332
assert ( helper . isString ( value ) , 'Value must be string. Found value "' + value + '" of type "' + ( typeof value ) + '"' ) ;
330
333
const deadline = this . _page . _timeoutSettings . computeDeadline ( options ) ;
331
334
await this . _page . _frameManager . waitForSignalsCreatedBy ( async ( ) => {
@@ -341,11 +344,13 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
341
344
}
342
345
343
346
async selectText ( ) : Promise < void > {
347
+ this . _page . _log ( inputLog , `elementHandle.selectText()` ) ;
344
348
const injectedResult = await this . _evaluateInUtility ( ( { injected, node } ) => injected . selectText ( node ) , { } ) ;
345
349
handleInjectedResult ( injectedResult , '' ) ;
346
350
}
347
351
348
352
async setInputFiles ( files : string | types . FilePayload | string [ ] | types . FilePayload [ ] , options ?: types . NavigatingActionWaitOptions ) {
353
+ this . _page . _log ( inputLog , `elementHandle.setInputFiles(...)` ) ;
349
354
const deadline = this . _page . _timeoutSettings . computeDeadline ( options ) ;
350
355
const injectedResult = await this . _evaluateInUtility ( ( { node } ) : InjectedResult < boolean > => {
351
356
if ( node . nodeType !== Node . ELEMENT_NODE || ( node as Node as Element ) . tagName !== 'INPUT' )
@@ -381,11 +386,13 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
381
386
}
382
387
383
388
async focus ( ) {
389
+ this . _page . _log ( inputLog , `elementHandle.focus()` ) ;
384
390
const injectedResult = await this . _evaluateInUtility ( ( { injected, node } ) => injected . focusNode ( node ) , { } ) ;
385
391
handleInjectedResult ( injectedResult , '' ) ;
386
392
}
387
393
388
394
async type ( text : string , options ?: { delay ?: number } & types . NavigatingActionWaitOptions ) {
395
+ this . _page . _log ( inputLog , `elementHandle.type("${ text } ")` ) ;
389
396
const deadline = this . _page . _timeoutSettings . computeDeadline ( options ) ;
390
397
await this . _page . _frameManager . waitForSignalsCreatedBy ( async ( ) => {
391
398
await this . focus ( ) ;
@@ -394,6 +401,7 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
394
401
}
395
402
396
403
async press ( key : string , options ?: { delay ?: number } & types . NavigatingActionWaitOptions ) {
404
+ this . _page . _log ( inputLog , `elementHandle.press("${ key } ")` ) ;
397
405
const deadline = this . _page . _timeoutSettings . computeDeadline ( options ) ;
398
406
await this . _page . _frameManager . waitForSignalsCreatedBy ( async ( ) => {
399
407
await this . focus ( ) ;
@@ -402,10 +410,12 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
402
410
}
403
411
404
412
async check ( options ?: types . PointerActionWaitOptions & types . NavigatingActionWaitOptions ) {
413
+ this . _page . _log ( inputLog , `elementHandle.check()` ) ;
405
414
await this . _setChecked ( true , options ) ;
406
415
}
407
416
408
417
async uncheck ( options ?: types . PointerActionWaitOptions & types . NavigatingActionWaitOptions ) {
418
+ this . _page . _log ( inputLog , `elementHandle.uncheck()` ) ;
409
419
await this . _setChecked ( false , options ) ;
410
420
}
411
421
@@ -494,7 +504,7 @@ function handleInjectedResult<T = undefined>(injectedResult: InjectedResult<T>,
494
504
if ( injectedResult . status === 'notconnected' )
495
505
throw new NotConnectedError ( ) ;
496
506
if ( injectedResult . status === 'timeout' )
497
- throw new TimeoutError ( `waiting for ${ timeoutMessage } failed: timeout exceeded` ) ;
507
+ throw new TimeoutError ( `waiting for ${ timeoutMessage } failed: timeout exceeded. Re-run with the DEBUG=pw:input env variable to see the debug log. ` ) ;
498
508
if ( injectedResult . status === 'error' )
499
509
throw new Error ( injectedResult . error ) ;
500
510
return injectedResult . value as T ;
0 commit comments