2020-08-05 01:57:25 +03:00
/ * *
* Copyright 2019 Google Inc . All rights reserved .
*
* 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-20 07:32:12 +03:00
import { options } from '../playwright.fixtures' ;
2020-08-05 01:57:25 +03:00
2020-08-12 01:50:53 +03:00
import path from 'path' ;
import utils from '../utils' ;
2020-08-27 00:16:35 +03:00
import type { ChromiumBrowser , ChromiumBrowserContext } from '../..' ;
2020-08-14 17:22:54 +03:00
const { makeUserDataDir , removeUserDataDir } = utils ;
2020-08-05 01:57:25 +03:00
2020-08-28 14:20:29 +03:00
it . skip ( options . WIRE || ! options . CHROMIUM ) ( 'should throw with remote-debugging-pipe argument' , async ( { browserType , defaultBrowserOptions } ) = > {
2020-08-05 01:57:25 +03:00
const options = Object . assign ( { } , defaultBrowserOptions ) ;
options . args = [ '--remote-debugging-pipe' ] . concat ( options . args || [ ] ) ;
const error = await browserType . launchServer ( options ) . catch ( e = > e ) ;
expect ( error . message ) . toContain ( 'Playwright manages remote debugging connection itself' ) ;
} ) ;
2020-08-28 14:20:29 +03:00
it . skip ( options . WIRE || ! options . CHROMIUM ) ( 'should not throw with remote-debugging-port argument' , async ( { browserType , defaultBrowserOptions } ) = > {
2020-08-05 01:57:25 +03:00
const options = Object . assign ( { } , defaultBrowserOptions ) ;
options . args = [ '--remote-debugging-port=0' ] . concat ( options . args || [ ] ) ;
const browser = await browserType . launchServer ( options ) ;
await browser . close ( ) ;
} ) ;
2020-08-28 14:20:29 +03:00
it . skip ( ! options . CHROMIUM || options . WIRE || WIN ) ( 'should open devtools when "devtools: true" option is given' , async ( { browserType , defaultBrowserOptions } ) = > {
2020-08-05 01:57:25 +03:00
let devtoolsCallback ;
const devtoolsPromise = new Promise ( f = > devtoolsCallback = f ) ;
const __testHookForDevTools = devtools = > devtools . __testHookOnBinding = parsed = > {
if ( parsed . method === 'getPreferences' )
devtoolsCallback ( ) ;
} ;
2020-08-12 01:50:53 +03:00
const browser = await browserType . launch ( { . . . defaultBrowserOptions , headless : false , devtools : true , __testHookForDevTools } as any ) ;
2020-08-05 01:57:25 +03:00
const context = await browser . newContext ( ) ;
await Promise . all ( [
devtoolsPromise ,
context . newPage ( )
] ) ;
await browser . close ( ) ;
} ) ;
2020-08-28 14:20:29 +03:00
it . skip ( ! options . CHROMIUM ) ( 'should return background pages' , async ( { browserType , defaultBrowserOptions } ) = > {
2020-08-05 01:57:25 +03:00
const userDataDir = await makeUserDataDir ( ) ;
const extensionPath = path . join ( __dirname , '..' , 'assets' , 'simple-extension' ) ;
const extensionOptions = { . . . defaultBrowserOptions ,
headless : false ,
args : [
` --disable-extensions-except= ${ extensionPath } ` ,
` --load-extension= ${ extensionPath } ` ,
] ,
} ;
2020-08-12 01:50:53 +03:00
const context = await browserType . launchPersistentContext ( userDataDir , extensionOptions ) as ChromiumBrowserContext ;
2020-08-05 01:57:25 +03:00
const backgroundPages = context . backgroundPages ( ) ;
2020-08-28 14:20:29 +03:00
const backgroundPage = backgroundPages . length
? backgroundPages [ 0 ]
: await context . waitForEvent ( 'backgroundpage' ) ;
2020-08-05 01:57:25 +03:00
expect ( backgroundPage ) . toBeTruthy ( ) ;
expect ( context . backgroundPages ( ) ) . toContain ( backgroundPage ) ;
expect ( context . pages ( ) ) . not . toContain ( backgroundPage ) ;
await context . close ( ) ;
await removeUserDataDir ( userDataDir ) ;
} ) ;
2020-08-20 22:51:05 +03:00
it . skip ( ! options . CHROMIUM ) ( 'should not create pages automatically' , async ( { browserType , defaultBrowserOptions } ) = > {
2020-08-05 01:57:25 +03:00
const browser = await browserType . launch ( defaultBrowserOptions ) ;
2020-08-12 01:50:53 +03:00
const browserSession = await ( browser as ChromiumBrowser ) . newBrowserCDPSession ( ) ;
2020-08-05 01:57:25 +03:00
const targets = [ ] ;
browserSession . on ( 'Target.targetCreated' , async ( { targetInfo } ) = > {
if ( targetInfo . type !== 'browser' )
2020-08-28 14:20:29 +03:00
targets . push ( targetInfo ) ;
2020-08-05 01:57:25 +03:00
} ) ;
await browserSession . send ( 'Target.setDiscoverTargets' , { discover : true } ) ;
await browser . newContext ( ) ;
await browser . close ( ) ;
expect ( targets . length ) . toBe ( 0 ) ;
} ) ;