| 
									
										
										
										
											2019-11-18 18:18:28 -08: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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-05 14:12:22 -08:00
										 |  |  | const path = require('path'); | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  | const utils = require('../utils'); | 
					
						
							|  |  |  | const {makeUserDataDir, removeUserDataDir} = utils; | 
					
						
							| 
									
										
										
										
											2020-07-17 13:02:50 -07:00
										 |  |  | const {FFOX, CHROMIUM, WEBKIT, WIN, USES_HOOKS} = testOptions; | 
					
						
							| 
									
										
										
										
											2019-11-18 18:18:28 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-17 13:02:50 -07:00
										 |  |  | describe.skip(!CHROMIUM)('launcher', function() { | 
					
						
							| 
									
										
										
										
											2020-04-12 22:19:26 -07:00
										 |  |  |   it('should throw with remote-debugging-pipe argument', async({browserType, defaultBrowserOptions}) => { | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07: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-03-03 15:02:06 -08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-04-18 19:06:42 -07:00
										 |  |  |   it('should not throw with remote-debugging-port argument', async({browserType, defaultBrowserOptions}) => { | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  |     const options = Object.assign({}, defaultBrowserOptions); | 
					
						
							| 
									
										
										
										
											2020-04-18 19:06:42 -07:00
										 |  |  |     options.args = ['--remote-debugging-port=0'].concat(options.args || []); | 
					
						
							|  |  |  |     const browser = await browserType.launchServer(options); | 
					
						
							|  |  |  |     await browser.close(); | 
					
						
							| 
									
										
										
										
											2020-03-03 15:02:06 -08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-07-17 16:14:23 -07:00
										 |  |  |   it.fail(USES_HOOKS || WIN)('should open devtools when "devtools: true" option is given', async({browserType, defaultBrowserOptions}) => { | 
					
						
							| 
									
										
										
										
											2020-05-19 14:55:11 -07:00
										 |  |  |     let devtoolsCallback; | 
					
						
							|  |  |  |     const devtoolsPromise = new Promise(f => devtoolsCallback = f); | 
					
						
							|  |  |  |     const __testHookForDevTools = devtools => devtools.__testHookOnBinding = parsed => { | 
					
						
							|  |  |  |       if (parsed.method === 'getPreferences') | 
					
						
							|  |  |  |         devtoolsCallback(); | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     const browser = await browserType.launch({...defaultBrowserOptions, headless: false, devtools: true, __testHookForDevTools}); | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  |     const context = await browser.newContext(); | 
					
						
							|  |  |  |     await Promise.all([ | 
					
						
							| 
									
										
										
										
											2020-05-19 14:55:11 -07:00
										 |  |  |       devtoolsPromise, | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  |       context.newPage() | 
					
						
							|  |  |  |     ]); | 
					
						
							|  |  |  |     await browser.close(); | 
					
						
							| 
									
										
										
										
											2020-03-03 15:02:06 -08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2020-03-03 15:02:06 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-17 13:02:50 -07:00
										 |  |  | describe.skip(!CHROMIUM)('extensions', () => { | 
					
						
							| 
									
										
										
										
											2020-04-12 22:19:26 -07:00
										 |  |  |   it('should return background pages', async({browserType, defaultBrowserOptions}) => { | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  |     const userDataDir = await makeUserDataDir(); | 
					
						
							| 
									
										
										
										
											2020-04-12 22:19:26 -07:00
										 |  |  |     const extensionPath = path.join(__dirname, '..', 'assets', 'simple-extension'); | 
					
						
							|  |  |  |     const extensionOptions = {...defaultBrowserOptions, | 
					
						
							|  |  |  |       headless: false, | 
					
						
							|  |  |  |       args: [ | 
					
						
							|  |  |  |         `--disable-extensions-except=${extensionPath}`, | 
					
						
							|  |  |  |         `--load-extension=${extensionPath}`, | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  |     const context = await browserType.launchPersistentContext(userDataDir, extensionOptions); | 
					
						
							|  |  |  |     const backgroundPages = context.backgroundPages(); | 
					
						
							|  |  |  |     let backgroundPage = backgroundPages.length | 
					
						
							|  |  |  |         ? backgroundPages[0] | 
					
						
							|  |  |  |         : await context.waitForEvent('backgroundpage'); | 
					
						
							|  |  |  |     expect(backgroundPage).toBeTruthy(); | 
					
						
							|  |  |  |     expect(context.backgroundPages()).toContain(backgroundPage); | 
					
						
							|  |  |  |     expect(context.pages()).not.toContain(backgroundPage); | 
					
						
							| 
									
										
										
										
											2020-04-12 15:30:53 -07:00
										 |  |  |     await context.close(); | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  |     await removeUserDataDir(userDataDir); | 
					
						
							| 
									
										
										
										
											2019-11-18 18:18:28 -08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2019-12-04 16:12:43 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-17 13:02:50 -07:00
										 |  |  | describe.skip(!CHROMIUM)('BrowserContext', function() { | 
					
						
							| 
									
										
										
										
											2020-05-19 14:55:11 -07:00
										 |  |  |   it('should not create pages automatically', async ({browserType, defaultBrowserOptions}) => { | 
					
						
							|  |  |  |     const browser = await browserType.launch(defaultBrowserOptions); | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  |     const browserSession = await browser.newBrowserCDPSession(); | 
					
						
							|  |  |  |     const targets = []; | 
					
						
							|  |  |  |     browserSession.on('Target.targetCreated', async ({targetInfo}) => { | 
					
						
							|  |  |  |       if (targetInfo.type !== 'browser') | 
					
						
							|  |  |  |           targets.push(targetInfo); | 
					
						
							| 
									
										
										
										
											2020-03-05 14:46:12 -08:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  |     await browserSession.send('Target.setDiscoverTargets', { discover: true }); | 
					
						
							|  |  |  |     await browser.newContext(); | 
					
						
							|  |  |  |     await browser.close(); | 
					
						
							|  |  |  |     expect(targets.length).toBe(0); | 
					
						
							| 
									
										
										
										
											2020-03-05 14:46:12 -08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-04-08 15:19:09 -07:00
										 |  |  | }); |