2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Copyright  2017  Google  Inc .  All  rights  reserved . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Modifications  copyright  ( c )  Microsoft  Corporation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Licensed  under  the  Apache  License ,  Version  2.0  ( the  "License" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  you  may  not  use  this  file  except  in  compliance  with  the  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  You  may  obtain  a  copy  of  the  License  at 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *      http : //www.apache.org/licenses/LICENSE-2.0
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Unless  required  by  applicable  law  or  agreed  to  in  writing ,  software 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  distributed  under  the  License  is  distributed  on  an  "AS IS"  BASIS , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  WITHOUT  WARRANTIES  OR  CONDITIONS  OF  ANY  KIND ,  either  express  or  implied . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  See  the  License  for  the  specific  language  governing  permissions  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  limitations  under  the  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-16 19:19:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-29 11:11:32 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  playwrightTest  as  it ,  slowPlaywrightTest  as  slowTest ,  expect  }  from  './config/browserTest' ;  
						 
					
						
							
								
									
										
										
										
											2020-08-07 11:19:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  fs  from  'fs' ;  
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								it ( 'should support hasTouch option' ,  async  ( { server ,  launchPersistent } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( { hasTouch : true } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . PREFIX  +  '/mobile.html' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  'ontouchstart'  in  window ) ) . toBe ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should work in persistent context' ,  async  ( { server ,  launchPersistent ,  browserName } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it . skip ( browserName  ===  'firefox' ,  'Firefox does not support mobile' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( { viewport :  { width : 320 ,  height : 480 } ,  isMobile : true } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . PREFIX  +  '/empty.html' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  window . innerWidth ) ) . toBe ( 980 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								it ( 'should support colorScheme option' ,  async  ( { launchPersistent } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( { colorScheme :  'dark' } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  matchMedia ( '(prefers-color-scheme: light)' ) . matches ) ) . toBe ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  matchMedia ( '(prefers-color-scheme: dark)' ) . matches ) ) . toBe ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								it ( 'should support timezoneId option' ,  async  ( { launchPersistent } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-09-14 16:53:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( { locale :  'en-US' ,  timezoneId :  'America/Jamaica' } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  new  Date ( 1479579154987 ) . toString ( ) ) ) . toBe ( 'Sat Nov 19 2016 13:12:34 GMT-0500 (Eastern Standard Time)' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								it ( 'should support locale option' ,  async  ( { launchPersistent } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( { locale :  'fr-CH' } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  navigator . language ) ) . toBe ( 'fr-CH' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								it ( 'should support geolocation and permissions options' ,  async  ( { server ,  launchPersistent } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( { geolocation :  { longitude : 10 ,  latitude : 10 } ,  permissions :  [ 'geolocation' ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  geolocation  =  await  page . evaluate ( ( )  = >  new  Promise ( resolve  = >  navigator . geolocation . getCurrentPosition ( position  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    resolve ( { latitude : position.coords.latitude ,  longitude : position.coords.longitude } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( geolocation ) . toEqual ( { latitude : 10 ,  longitude : 10 } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								it ( 'should support ignoreHTTPSErrors option' ,  async  ( { httpsServer ,  launchPersistent } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( { ignoreHTTPSErrors : true } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  let  error  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  response  =  await  page . goto ( httpsServer . EMPTY_PAGE ) . catch ( e  = >  error  =  e ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( error ) . toBe ( null ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( response . ok ( ) ) . toBe ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-22 15:22:40 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should support extraHTTPHeaders option' ,  async  ( { server ,  launchPersistent } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( { extraHTTPHeaders :  {  foo :  'bar'  } } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  [ request ]  =  await  Promise . all ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    server . waitForRequest ( '/empty.html' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    page . goto ( server . EMPTY_PAGE ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( request . headers [ 'foo' ] ) . toBe ( 'bar' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-24 18:14:57 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should accept userDataDir' ,  async  ( { createUserDataDir ,  browserType ,  browserOptions } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  userDataDir  =  await  createUserDataDir ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  context  =  await  browserType . launchPersistentContext ( userDataDir ,  browserOptions ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  expect ( fs . readdirSync ( userDataDir ) . length ) . toBeGreaterThan ( 0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  context . close ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  expect ( fs . readdirSync ( userDataDir ) . length ) . toBeGreaterThan ( 0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								slowTest ( 'should restore state from userDataDir' ,  async  ( { browserType ,  browserOptions ,  server ,  createUserDataDir } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  userDataDir  =  await  createUserDataDir ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  browserContext  =  await  browserType . launchPersistentContext ( userDataDir ,  browserOptions ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  page  =  await  browserContext . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . evaluate ( ( )  = >  localStorage . hey  =  'hello' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  browserContext . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  browserContext2  =  await  browserType . launchPersistentContext ( userDataDir ,  browserOptions ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  page2  =  await  browserContext2 . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page2 . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page2 . evaluate ( ( )  = >  localStorage . hey ) ) . toBe ( 'hello' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  browserContext2 . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  userDataDir2  =  await  createUserDataDir ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  browserContext3  =  await  browserType . launchPersistentContext ( userDataDir2 ,  browserOptions ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  page3  =  await  browserContext3 . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page3 . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page3 . evaluate ( ( )  = >  localStorage . hey ) ) . not . toBe ( 'hello' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  browserContext3 . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								slowTest ( 'should restore cookies from userDataDir' ,  async  ( { browserType ,  browserOptions ,   server ,  createUserDataDir ,  platform ,  browserChannel } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  slowTest . fixme ( platform  ===  'win32'  &&  browserChannel  ===  'chrome' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  userDataDir  =  await  createUserDataDir ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  browserContext  =  await  browserType . launchPersistentContext ( userDataDir ,  browserOptions ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  page  =  await  browserContext . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  documentCookie  =  await  page . evaluate ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    document . cookie  =  'doSomethingOnlyOnce=true; expires=Fri, 31 Dec 9999 23:59:59 GMT' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  document . cookie ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( documentCookie ) . toBe ( 'doSomethingOnlyOnce=true' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  browserContext . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  browserContext2  =  await  browserType . launchPersistentContext ( userDataDir ,  browserOptions ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  page2  =  await  browserContext2 . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page2 . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page2 . evaluate ( ( )  = >  document . cookie ) ) . toBe ( 'doSomethingOnlyOnce=true' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  browserContext2 . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  userDataDir2  =  await  createUserDataDir ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  browserContext3  =  await  browserType . launchPersistentContext ( userDataDir2 ,  browserOptions ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  page3  =  await  browserContext3 . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page3 . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page3 . evaluate ( ( )  = >  document . cookie ) ) . not . toBe ( 'doSomethingOnlyOnce=true' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  browserContext3 . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								it ( 'should have default URL when launching browser' ,  async  ( { launchPersistent } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { context }  =  await  launchPersistent ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  urls  =  context . pages ( ) . map ( page  = >  page . url ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( urls ) . toEqual ( [ 'about:blank' ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should throw if page argument is passed' ,  async  ( { browserType ,  browserOptions ,  server ,  createUserDataDir ,  browserName } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it . skip ( browserName  ===  'firefox' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  options  =  { . . . browserOptions ,  args :  [ server . EMPTY_PAGE ]  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  error  =  await  browserType . launchPersistentContext ( await  createUserDataDir ( ) ,  options ) . catch ( e  = >  e ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  expect ( error . message ) . toContain ( 'can not specify page' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-29 11:11:32 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should have passed URL when launching with ignoreDefaultArgs: true' ,  async  ( { browserType ,  browserOptions ,  server ,  createUserDataDir ,  toImpl ,  mode ,  isFirefox } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  it . skip ( mode  !==  'default' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  userDataDir  =  await  createUserDataDir ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  args  =  toImpl ( browserType ) . _defaultArgs ( browserOptions ,  'persistent' ,  userDataDir ,  0 ) . filter ( a  = >  a  !==  'about:blank' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  options  =  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    . . . browserOptions , 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-29 11:11:32 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    args : isFirefox  ?  [ . . . args ,  '-new-tab' ,  server . EMPTY_PAGE ]  :  [ . . . args ,  server . EMPTY_PAGE ] , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    ignoreDefaultArgs : true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  browserContext  =  await  browserType . launchPersistentContext ( userDataDir ,  options ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  if  ( ! browserContext . pages ( ) . length ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  browserContext . waitForEvent ( 'page' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  browserContext . pages ( ) [ 0 ] . waitForLoadState ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  gotUrls  =  browserContext . pages ( ) . map ( page  = >  page . url ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( gotUrls ) . toEqual ( [ server . EMPTY_PAGE ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  browserContext . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should handle timeout' ,  async  ( { browserType ,  browserOptions ,  createUserDataDir ,  mode } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it . skip ( mode  !==  'default' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  options  =  {  . . . browserOptions ,  timeout : 5000 ,  __testHookBeforeCreateBrowser :  ( )  = >  new  Promise ( f  = >  setTimeout ( f ,  6000 ) )  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  error  =  await  browserType . launchPersistentContext ( await  createUserDataDir ( ) ,  options ) . catch ( e  = >  e ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  expect ( error . message ) . toContain ( ` browserType.launchPersistentContext: Timeout 5000ms exceeded. ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should handle exception' ,  async  ( { browserType ,  browserOptions ,  createUserDataDir ,  mode } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it . skip ( mode  !==  'default' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  e  =  new  Error ( 'Dummy' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-13 13:18:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  options  =  {  . . . browserOptions ,  __testHookBeforeCreateBrowser :  ( )  = >  {  throw  e ;  }  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  error  =  await  browserType . launchPersistentContext ( await  createUserDataDir ( ) ,  options ) . catch ( e  = >  e ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  expect ( error . message ) . toContain ( 'Dummy' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should fire close event for a persistent context' ,  async  ( { launchPersistent } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  { context }  =  await  launchPersistent ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  let  closed  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  context . on ( 'close' ,  ( )  = >  closed  =  true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( closed ) . toBe ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'coverage should work' ,  async  ( { server ,  launchPersistent ,  browserName } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it . skip ( browserName  !==  'chromium' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-08-28 04:20:29 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-03 13:41:48 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . coverage . startJSCoverage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . PREFIX  +  '/jscoverage/simple.html' ,  {  waitUntil :  'load'  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  coverage  =  await  page . coverage . stopJSCoverage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( coverage . length ) . toBe ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( coverage [ 0 ] . url ) . toContain ( '/jscoverage/simple.html' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( coverage [ 0 ] . functions . find ( f  = >  f . functionName  ===  'foo' ) . ranges [ 0 ] . count ) . toEqual ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-02 16:15:43 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should respect selectors' ,  async  ( { playwright ,  launchPersistent } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  { page }  =  await  launchPersistent ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  defaultContextCSS  =  ( )  = >  ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    query ( root ,  selector )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  root . querySelector ( selector ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    queryAll ( root : HTMLElement ,  selector : string )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  Array . from ( root . querySelectorAll ( selector ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-18 15:52:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  await  playwright . selectors . register ( 'defaultContextCSS' ,  defaultContextCSS ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-02 16:15:43 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . setContent ( ` <div>hello</div> ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . innerHTML ( 'css=div' ) ) . toBe ( 'hello' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . innerHTML ( 'defaultContextCSS=div' ) ) . toBe ( 'hello' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2021-03-15 09:50:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-02 21:07:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should connect to a browser with the default page' ,  async  ( { browserType ,  browserOptions ,  createUserDataDir ,  mode } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  it . skip ( mode  !==  'default' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-15 09:50:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  options  =  {  . . . browserOptions ,  __testHookOnConnectToBrowser :  ( )  = >  new  Promise ( f  = >  setTimeout ( f ,  3000 ) )  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  context  =  await  browserType . launchPersistentContext ( await  createUserDataDir ( ) ,  options ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( context . pages ( ) . length ) . toBe ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-17 10:31:35 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  await  context . close ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-15 09:50:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ) ;