| 
									
										
										
										
											2021-04-01 16:35:26 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  | import { baseTest } from '../config/baseTest'; | 
					
						
							| 
									
										
										
										
											2022-04-06 13:57:14 -08:00
										 |  |  | import type { PageTestFixtures, PageWorkerFixtures } from '../page/pageTestApi'; | 
					
						
							| 
									
										
										
										
											2021-10-11 10:52:17 -04:00
										 |  |  | import type { AndroidDevice, BrowserContext } from 'playwright-core'; | 
					
						
							|  |  |  | export { expect } from '@playwright/test'; | 
					
						
							| 
									
										
										
										
											2021-04-01 16:35:26 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  | type AndroidWorkerFixtures = PageWorkerFixtures & { | 
					
						
							| 
									
										
										
										
											2021-04-01 16:35:26 -07:00
										 |  |  |   androidDevice: AndroidDevice; | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |   androidContext: BrowserContext; | 
					
						
							| 
									
										
										
										
											2021-04-01 16:35:26 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  | export const androidTest = baseTest.extend<PageTestFixtures, AndroidWorkerFixtures>({ | 
					
						
							|  |  |  |   androidDevice: [async ({ playwright }, run) => { | 
					
						
							| 
									
										
										
										
											2021-05-16 19:58:26 -07:00
										 |  |  |     const device = (await playwright._android.devices())[0]; | 
					
						
							|  |  |  |     await device.shell('am force-stop org.chromium.webview_shell'); | 
					
						
							|  |  |  |     await device.shell('am force-stop com.android.chrome'); | 
					
						
							|  |  |  |     device.setDefaultTimeout(90000); | 
					
						
							|  |  |  |     await run(device); | 
					
						
							|  |  |  |     await device.close(); | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |   }, { scope: 'worker' }], | 
					
						
							| 
									
										
										
										
											2021-04-29 11:11:32 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |   browserVersion: [async ({ androidDevice }, run) => { | 
					
						
							| 
									
										
										
										
											2021-05-16 19:58:26 -07:00
										 |  |  |     const browserVersion = (await androidDevice.shell('dumpsys package com.android.chrome')) | 
					
						
							| 
									
										
										
										
											2021-04-29 11:11:32 -07:00
										 |  |  |         .toString('utf8') | 
					
						
							|  |  |  |         .split('\n') | 
					
						
							| 
									
										
										
										
											2023-10-23 09:31:30 -07:00
										 |  |  |         .find(line => line.includes('versionName='))! | 
					
						
							| 
									
										
										
										
											2021-04-29 11:11:32 -07:00
										 |  |  |         .trim() | 
					
						
							|  |  |  |         .split('=')[1]; | 
					
						
							| 
									
										
										
										
											2021-05-16 19:58:26 -07:00
										 |  |  |     await run(browserVersion); | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |   }, { scope: 'worker' }], | 
					
						
							| 
									
										
										
										
											2021-04-29 11:11:32 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |   browserMajorVersion: [async ({ browserVersion }, run) => { | 
					
						
							| 
									
										
										
										
											2021-05-16 19:58:26 -07:00
										 |  |  |     await run(Number(browserVersion.split('.')[0])); | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |   }, { scope: 'worker' }], | 
					
						
							| 
									
										
										
										
											2021-05-16 19:58:26 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |   isAndroid: [true, { scope: 'worker' }], | 
					
						
							|  |  |  |   isElectron: [false, { scope: 'worker' }], | 
					
						
							| 
									
										
										
										
											2024-06-21 00:43:26 +02:00
										 |  |  |   electronMajorVersion: [0, { scope: 'worker' }], | 
					
						
							| 
									
										
										
										
											2022-09-07 20:09:22 +02:00
										 |  |  |   isWebView2: [false, { scope: 'worker' }], | 
					
						
							| 
									
										
										
										
											2021-05-16 19:58:26 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |   androidContext: [async ({ androidDevice }, run) => { | 
					
						
							| 
									
										
										
										
											2021-08-15 22:54:30 -07:00
										 |  |  |     const context = await androidDevice.launchBrowser(); | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |     const [page] = context.pages(); | 
					
						
							| 
									
										
										
										
											2021-08-15 22:54:30 -07:00
										 |  |  |     await page.goto('data:text/html,Default page'); | 
					
						
							|  |  |  |     await run(context); | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  |   }, { scope: 'worker' }], | 
					
						
							| 
									
										
										
										
											2021-05-16 19:58:26 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   page: async ({ androidContext }, run) => { | 
					
						
							| 
									
										
										
										
											2021-08-15 22:54:30 -07:00
										 |  |  |     // Retain default page, otherwise Clank will re-create it.
 | 
					
						
							|  |  |  |     while (androidContext.pages().length > 1) | 
					
						
							|  |  |  |       await androidContext.pages()[1].close(); | 
					
						
							| 
									
										
										
										
											2021-05-16 19:58:26 -07:00
										 |  |  |     const page = await androidContext.newPage(); | 
					
						
							|  |  |  |     await run(page); | 
					
						
							|  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  | }); |