| 
									
										
										
										
											2020-03-21 12:05:37 -07:00
										 |  |  | const { chromium, webkit } = require('playwright'); | 
					
						
							|  |  |  | const assert = require('assert'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * In this script, we will login on GitHub.com through Chromium, | 
					
						
							| 
									
										
										
										
											2021-01-08 12:24:10 -08:00
										 |  |  |  * and reuse login state inside WebKit. This recipe can be | 
					
						
							| 
									
										
										
										
											2020-03-21 12:05:37 -07:00
										 |  |  |  * used to speed up tests by logging in once and reusing login state. | 
					
						
							| 
									
										
										
										
											2020-11-25 11:32:46 -08:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-03-21 12:05:37 -07:00
										 |  |  |  * Steps summary | 
					
						
							|  |  |  |  * 1. Login on GitHub.com in Chromium | 
					
						
							| 
									
										
										
										
											2021-01-08 12:24:10 -08:00
										 |  |  |  * 2. Export storage state from Chromium browser context | 
					
						
							|  |  |  |  * 3. Set storage state in WebKit browser context and verify login | 
					
						
							| 
									
										
										
										
											2020-03-21 12:05:37 -07:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const account = { login: '', password: '' }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (async () => { | 
					
						
							|  |  |  |   // Create a Chromium browser context
 | 
					
						
							|  |  |  |   const crBrowser = await chromium.launch(); | 
					
						
							|  |  |  |   const crContext = await crBrowser.newContext(); | 
					
						
							|  |  |  |   const crPage = await crContext.newPage(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Navigate and auto-wait on the page to load after navigation
 | 
					
						
							|  |  |  |   await crPage.goto('https://github.com/login'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Fill login form elements
 | 
					
						
							|  |  |  |   await crPage.fill('input[name="login"]', account.login); | 
					
						
							|  |  |  |   await crPage.fill('input[name="password"]', account.password); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Submit form and auto-wait for the navigation to complete
 | 
					
						
							|  |  |  |   await crPage.click('input[type="submit"]'); | 
					
						
							|  |  |  |   await verifyIsLoggedIn(crPage); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-08 12:24:10 -08:00
										 |  |  |   // Get storage state from Chromium browser context
 | 
					
						
							|  |  |  |   const storageState = await crContext.storageState(); | 
					
						
							| 
									
										
										
										
											2020-03-21 12:05:37 -07:00
										 |  |  |   await crBrowser.close(); | 
					
						
							| 
									
										
										
										
											2020-11-25 11:32:46 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-08 12:24:10 -08:00
										 |  |  |   // Create WebKit browser context with saved storage state
 | 
					
						
							| 
									
										
										
										
											2020-03-21 12:05:37 -07:00
										 |  |  |   const wkBrowser = await webkit.launch(); | 
					
						
							| 
									
										
										
										
											2021-01-08 12:24:10 -08:00
										 |  |  |   const wkContext = await wkBrowser.newContext({ storageState }); | 
					
						
							| 
									
										
										
										
											2020-03-21 12:05:37 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Navigate to GitHub.com and verify that we are logged in
 | 
					
						
							|  |  |  |   const wkPage = await wkContext.newPage(); | 
					
						
							|  |  |  |   await wkPage.goto('http://github.com'); | 
					
						
							|  |  |  |   await wkPage.screenshot({ path: 'webkit.png' }); | 
					
						
							|  |  |  |   await verifyIsLoggedIn(wkPage); | 
					
						
							|  |  |  |   await wkBrowser.close(); | 
					
						
							|  |  |  | })(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const verifyIsLoggedIn = async (page) => { | 
					
						
							| 
									
										
										
										
											2020-04-23 08:44:58 -07:00
										 |  |  |   await page.click('summary[aria-label="View profile and more"]') | 
					
						
							| 
									
										
										
										
											2020-11-25 11:32:46 -08:00
										 |  |  |   assert(await page.waitForSelector(`text="Your profile"`)); | 
					
						
							| 
									
										
										
										
											2020-03-21 12:05:37 -07:00
										 |  |  | } |