mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	 c711fb35ad
			
		
	
	
		c711fb35ad
		
			
		
	
	
	
	
		
			
			Support for displayName was removed in Node 16. Switching to Function.name instead. Relevant V8 change: https://chromium-review.googlesource.com/c/v8/v8/+/2692189
		
			
				
	
	
		
			667 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			667 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| set -e
 | |
| set +x
 | |
| 
 | |
| trap "cd $(pwd -P)" EXIT
 | |
| cd "$(dirname $0)"
 | |
| 
 | |
| rm -rf ./output
 | |
| mkdir ./output
 | |
| cd ./output
 | |
| 
 | |
| # cleanup environment
 | |
| unset PLAYWRIGHT_DOWNLOAD_HOST
 | |
| unset PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD
 | |
| export PLAYWRIGHT_BROWSERS_PATH=0
 | |
| 
 | |
| # Pack all packages and put them in our output folder.
 | |
| echo "Building packages..."
 | |
| PACKAGE_BUILDER="../../utils/pack_package.js"
 | |
| PLAYWRIGHT_CORE_TGZ="$(node ${PACKAGE_BUILDER} playwright-core ./playwright-core.tgz)"
 | |
| echo "playwright-core built"
 | |
| PLAYWRIGHT_TGZ="$(node ${PACKAGE_BUILDER} playwright ./playwright.tgz)"
 | |
| echo "playwright built"
 | |
| PLAYWRIGHT_CHROMIUM_TGZ="$(node ${PACKAGE_BUILDER} playwright-chromium ./playwright-chromium.tgz)"
 | |
| echo "playwright-chromium built"
 | |
| PLAYWRIGHT_WEBKIT_TGZ="$(node ${PACKAGE_BUILDER} playwright-webkit ./playwright-webkit.tgz)"
 | |
| echo "playwright-webkit built"
 | |
| PLAYWRIGHT_FIREFOX_TGZ="$(node ${PACKAGE_BUILDER} playwright-firefox ./playwright-firefox.tgz)"
 | |
| echo "playwright-firefox built"
 | |
| PLAYWRIGHT_TEST_TGZ="$(node ${PACKAGE_BUILDER} playwright-test ./playwright-test.tgz)"
 | |
| echo "playwright-test built"
 | |
| 
 | |
| SCRIPTS_PATH="$(pwd -P)/.."
 | |
| TEST_ROOT="/tmp/playwright-installation-tests"
 | |
| rm -rf "${TEST_ROOT}"
 | |
| mkdir -p "${TEST_ROOT}"
 | |
| NODE_VERSION=$(node -e "console.log(process.version.slice(1).split('.')[0])")
 | |
| 
 | |
| function copy_test_scripts {
 | |
|   cp "${SCRIPTS_PATH}/inspector-custom-executable.js" .
 | |
|   cp "${SCRIPTS_PATH}/sanity.js" .
 | |
|   cp "${SCRIPTS_PATH}/screencast.js" .
 | |
|   cp "${SCRIPTS_PATH}/validate-dependencies.js" .
 | |
|   cp "${SCRIPTS_PATH}/validate-dependencies-skip-executable-path.js" .
 | |
|   cp "${SCRIPTS_PATH}/esm.mjs" .
 | |
|   cp "${SCRIPTS_PATH}/esm-playwright.mjs" .
 | |
|   cp "${SCRIPTS_PATH}/esm-playwright-chromium.mjs" .
 | |
|   cp "${SCRIPTS_PATH}/esm-playwright-firefox.mjs" .
 | |
|   cp "${SCRIPTS_PATH}/esm-playwright-webkit.mjs" .
 | |
|   cp "${SCRIPTS_PATH}/esm-playwright-test.mjs" .
 | |
|   cp "${SCRIPTS_PATH}/sanity-electron.js" .
 | |
|   cp "${SCRIPTS_PATH}/electron-app.js" .
 | |
|   cp "${SCRIPTS_PATH}/driver-client.js" .
 | |
|   cp "${SCRIPTS_PATH}/sample.spec.js" .
 | |
|   cp "${SCRIPTS_PATH}/failing.spec.js" .
 | |
|   cp "${SCRIPTS_PATH}/read-json-report.js" .
 | |
|   cp "${SCRIPTS_PATH}/playwright-test-types.ts" .
 | |
| }
 | |
| 
 | |
| function run_tests {
 | |
|   test_playwright_test_should_work
 | |
|   test_screencast
 | |
|   test_typescript_types
 | |
|   test_playwright_global_installation_subsequent_installs
 | |
|   test_playwright_should_work_with_relative_home_path
 | |
|   test_playwright_should_work_with_relative_browsers_path
 | |
|   test_playwright_validate_dependencies
 | |
|   test_playwright_validate_dependencies_skip_executable_path
 | |
|   test_playwright_global_installation
 | |
|   test_playwright_global_installation_cross_package
 | |
|   test_playwright_electron_should_work
 | |
|   test_electron_types
 | |
|   test_android_types
 | |
|   test_playwright_cli_screenshot_should_work
 | |
|   test_playwright_cli_install_should_work
 | |
|   test_playwright_cli_codegen_should_work
 | |
|   test_playwright_driver_should_work
 | |
|   test_skip_browser_download
 | |
|   test_skip_browser_download_inspect_with_custom_executable
 | |
|   test_playwright_should_work
 | |
|   test_playwright_chromium_should_work
 | |
|   test_playwright_webkit_should_work
 | |
|   test_playwright_firefox_should_work
 | |
|   test_playwright_test_stacks_should_work
 | |
| }
 | |
| 
 | |
| function test_screencast {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
|   copy_test_scripts
 | |
| 
 | |
|   local BROWSERS="$(pwd -P)/browsers"
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_TGZ}
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_FIREFOX_TGZ}
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_WEBKIT_TGZ}
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_CHROMIUM_TGZ}
 | |
| 
 | |
|   echo "Running screencast.js"
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node screencast.js playwright
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node screencast.js playwright-chromium
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node screencast.js playwright-webkit
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node screencast.js playwright-firefox
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_typescript_types {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
|   copy_test_scripts
 | |
| 
 | |
|   # install all packages.
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_FIREFOX_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_WEBKIT_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_CHROMIUM_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_TEST_TGZ}
 | |
| 
 | |
|   # typecheck all packages.
 | |
|   for PKG_NAME in "playwright" \
 | |
|                   "playwright-core" \
 | |
|                   "playwright-firefox" \
 | |
|                   "playwright-chromium" \
 | |
|                   "playwright-webkit"
 | |
|   do
 | |
|     echo "Checking types of ${PKG_NAME}"
 | |
|     echo "import { Page } from '${PKG_NAME}';" > "${PKG_NAME}.ts" && npx -p typescript@3.7.5 tsc "${PKG_NAME}.ts"
 | |
|   done;
 | |
| 
 | |
|   echo "Checking types of @playwright/test"
 | |
|   echo npx -p typescript@3.7.5 tsc "playwright-test-types.ts"
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_global_installation {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   local BROWSERS="$(pwd -P)/browsers"
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_TGZ}
 | |
|   if [[ ! -d "${BROWSERS}" ]]; then
 | |
|     echo "Directory for shared browsers was not created!"
 | |
|     exit 1
 | |
|   fi
 | |
|   copy_test_scripts
 | |
| 
 | |
|   echo "Running sanity.js"
 | |
|   node sanity.js playwright none
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node sanity.js playwright
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_global_installation_cross_package {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_FIREFOX_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_WEBKIT_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_CHROMIUM_TGZ}
 | |
| 
 | |
|   local BROWSERS="$(pwd -P)/browsers"
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_TGZ}
 | |
|   if [[ ! -d "${BROWSERS}" ]]; then
 | |
|     echo "Directory for shared browsers was not created!"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   copy_test_scripts
 | |
| 
 | |
|   echo "Running sanity.js"
 | |
|   # Every package should be able to launch.
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node sanity.js playwright-chromium all
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node sanity.js playwright-firefox all
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node sanity.js playwright-webkit all
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| # @see https://github.com/microsoft/playwright/issues/1651
 | |
| function test_playwright_global_installation_subsequent_installs {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   local BROWSERS="$(pwd -P)/browsers"
 | |
| 
 | |
|   mkdir install-1 && pushd install-1 && npm init -y
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_TGZ}
 | |
|   # Note: the `npm install` would not actually crash, the error
 | |
|   # is merely logged to the console. To reproduce the error, we should make
 | |
|   # sure that script's install.js can be run subsequently without unhandled promise rejections.
 | |
|   # Note: the flag `--unahdnled-rejections=strict` will force node to terminate in case
 | |
|   # of UnhandledPromiseRejection.
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node --unhandled-rejections=strict node_modules/playwright/install.js
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_skip_browser_download {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   OUTPUT=$(PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install --foreground-script ${PLAYWRIGHT_TGZ})
 | |
|   if [[ "${OUTPUT}" != *"Skipping browsers download because"* ]]; then
 | |
|     echo "missing log message that browsers download is skipped"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   if [[ -d ./node_modules/playwright/.local-browsers ]]; then
 | |
|     echo "local browsers folder should be empty"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_skip_browser_download_inspect_with_custom_executable {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
|   copy_test_scripts
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   OUTPUT=$(PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install --foreground-script ${PLAYWRIGHT_TGZ})
 | |
|   if [[ "${OUTPUT}" != *"Skipping browsers download because"* ]]; then
 | |
|     echo "missing log message that browsers download is skipped"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   if [[ "$(uname)" != "Linux" ]]; then
 | |
|     echo
 | |
|     echo "Skipping test on non-Linux platform"
 | |
|     echo
 | |
|     return
 | |
|   fi
 | |
| 
 | |
|   OUTPUT=$(PWDEBUG=1 node inspector-custom-executable.js)
 | |
|   if [[ "${OUTPUT}" != *"SUCCESS"* ]]; then
 | |
|     echo "missing log message that launch succeeded: ${OUTPUT}"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   OUTPUT=$(npm install --foreground-script ${PLAYWRIGHT_TGZ})
 | |
|   if [[ "${OUTPUT}" != *"chromium"* ]]; then
 | |
|     echo "ERROR: should download chromium"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"firefox"* ]]; then
 | |
|     echo "ERROR: should download firefox"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"webkit"* ]]; then
 | |
|     echo "ERROR: should download webkit"
 | |
|     exit 1
 | |
|   fi
 | |
|   copy_test_scripts
 | |
| 
 | |
|   echo "Running sanity.js"
 | |
|   node sanity.js playwright
 | |
|   if [[ ${NODE_VERSION} -ge 14 ]]; then
 | |
|     echo "Running esm.js"
 | |
|     node esm-playwright.mjs
 | |
|   fi
 | |
| 
 | |
|   echo "Running playwright test"
 | |
|   if npx playwright test -c .; then
 | |
|     echo "ERROR: should not be able to run tests with just playwright package"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_should_work_with_relative_home_path {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_BROWSERS_PATH="" HOME=. npm install ${PLAYWRIGHT_TGZ}
 | |
|   copy_test_scripts
 | |
|   echo "Running sanity.js"
 | |
|   # Firefox does not work with relative HOME.
 | |
|   PLAYWRIGHT_BROWSERS_PATH="" HOME=. node sanity.js playwright chromium webkit
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_should_work_with_relative_browsers_path {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   # Make sure that browsers path is resolved relative to the `npm install` call location.
 | |
|   mkdir foo
 | |
|   cd foo
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_BROWSERS_PATH="../relative" npm install ${PLAYWRIGHT_TGZ}
 | |
|   cd ..
 | |
| 
 | |
|   copy_test_scripts
 | |
|   echo "Running sanity.js"
 | |
|   PLAYWRIGHT_BROWSERS_PATH="./relative" node sanity.js playwright
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_chromium_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   OUTPUT=$(npm install --foreground-script ${PLAYWRIGHT_CHROMIUM_TGZ})
 | |
|   if [[ "${OUTPUT}" != *"chromium"* ]]; then
 | |
|     echo "ERROR: should download chromium"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" == *"firefox"* ]]; then
 | |
|     echo "ERROR: should not download firefox"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" == *"webkit"* ]]; then
 | |
|     echo "ERROR: should not download webkit"
 | |
|     exit 1
 | |
|   fi
 | |
|   copy_test_scripts
 | |
| 
 | |
|   echo "Running sanity.js"
 | |
|   node sanity.js playwright-chromium
 | |
|   if [[ ${NODE_VERSION} -ge 14 ]]; then
 | |
|     echo "Running esm.js"
 | |
|     node esm-playwright-chromium.mjs
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_webkit_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   OUTPUT=$(npm install --foreground-script ${PLAYWRIGHT_WEBKIT_TGZ})
 | |
|   if [[ "${OUTPUT}" == *"chromium"* ]]; then
 | |
|     echo "ERROR: should not download chromium"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" == *"firefox"* ]]; then
 | |
|     echo "ERROR: should not download firefox"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"webkit"* ]]; then
 | |
|     echo "ERROR: should download webkit"
 | |
|     exit 1
 | |
|   fi
 | |
|   copy_test_scripts
 | |
| 
 | |
|   echo "Running sanity.js"
 | |
|   node sanity.js playwright-webkit
 | |
|   if [[ ${NODE_VERSION} -ge 14 ]]; then
 | |
|     echo "Running esm.js"
 | |
|     node esm-playwright-webkit.mjs
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_firefox_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   OUTPUT=$(npm install --foreground-script ${PLAYWRIGHT_FIREFOX_TGZ})
 | |
|   if [[ "${OUTPUT}" == *"chromium"* ]]; then
 | |
|     echo "ERROR: should not download chromium"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"firefox"* ]]; then
 | |
|     echo "ERROR: should download firefox"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" == *"webkit"* ]]; then
 | |
|     echo "ERROR: should not download webkit"
 | |
|     exit 1
 | |
|   fi
 | |
|   copy_test_scripts
 | |
| 
 | |
|   echo "Running sanity.js"
 | |
|   node sanity.js playwright-firefox
 | |
|   if [[ ${NODE_VERSION} -ge 14 ]]; then
 | |
|     echo "Running esm.js"
 | |
|     node esm-playwright-firefox.mjs
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_validate_dependencies {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   npm install ${PLAYWRIGHT_TGZ}
 | |
|   copy_test_scripts
 | |
| 
 | |
|   OUTPUT="$(node validate-dependencies.js)"
 | |
|   if [[ "${OUTPUT}" != *"PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS"* ]]; then
 | |
|     echo "ERROR: validateDependencies was not called"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_validate_dependencies_skip_executable_path {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   npm install ${PLAYWRIGHT_TGZ}
 | |
|   copy_test_scripts
 | |
| 
 | |
|   OUTPUT="$(node validate-dependencies-skip-executable-path.js)"
 | |
|   if [[ "${OUTPUT}" == *"PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS"* ]]; then
 | |
|     echo "ERROR: validateDependencies was called"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_electron_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_TGZ}
 | |
|   npm install electron@9.0
 | |
|   copy_test_scripts
 | |
| 
 | |
|   echo "Running sanity-electron.js"
 | |
|   xvfb-run --auto-servernum -- bash -c "node sanity-electron.js"
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_electron_types {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_TGZ}
 | |
|   npm install electron@12
 | |
|   npm install -D typescript@3.8
 | |
|   npm install -D @types/node@14
 | |
|   echo "import { Page, _electron, ElectronApplication, Electron } from 'playwright';" > "test.ts"
 | |
| 
 | |
|   echo "Running tsc"
 | |
|   npx -p typescript@3.7.5 tsc "test.ts"
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_android_types {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_TGZ}
 | |
|   npm install -D typescript@3.8
 | |
|   npm install -D @types/node@14
 | |
|   echo "import { AndroidDevice, _android, AndroidWebView, Page } from 'playwright';" > "test.ts"
 | |
| 
 | |
|   echo "Running tsc"
 | |
|   npx -p typescript@3.7.5 tsc "test.ts"
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_cli_screenshot_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   npm install ${PLAYWRIGHT_TGZ}
 | |
| 
 | |
|   echo "Running playwright screenshot"
 | |
| 
 | |
|   node_modules/.bin/playwright screenshot about:blank one.png
 | |
|   if [[ ! -f one.png ]]; then
 | |
|     echo 'node_modules/.bin/playwright does not work'
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   npx playwright screenshot about:blank two.png
 | |
|   if [[ ! -f two.png ]]; then
 | |
|     echo 'npx playwright does not work'
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_cli_install_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_TGZ}
 | |
| 
 | |
|   local BROWSERS="$(pwd -P)/browsers"
 | |
| 
 | |
|   echo "Running playwright install chromium"
 | |
|   OUTPUT=$(PLAYWRIGHT_BROWSERS_PATH=${BROWSERS} npx playwright install chromium)
 | |
|   if [[ "${OUTPUT}" != *"chromium"* ]]; then
 | |
|     echo "ERROR: should download chromium"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"ffmpeg"* ]]; then
 | |
|     echo "ERROR: should download ffmpeg"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" == *"webkit"* ]]; then
 | |
|     echo "ERROR: should not download webkit"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" == *"firefox"* ]]; then
 | |
|     echo "ERROR: should not download firefox"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "Running playwright install"
 | |
|   OUTPUT=$(PLAYWRIGHT_BROWSERS_PATH=${BROWSERS} npx playwright install)
 | |
|   if [[ "${OUTPUT}" == *"chromium"* ]]; then
 | |
|     echo "ERROR: should not download chromium"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" == *"ffmpeg"* ]]; then
 | |
|     echo "ERROR: should not download ffmpeg"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"webkit"* ]]; then
 | |
|     echo "ERROR: should download webkit"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"firefox"* ]]; then
 | |
|     echo "ERROR: should download firefox"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   copy_test_scripts
 | |
|   echo "Running sanity.js"
 | |
|   node sanity.js playwright none
 | |
|   PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node sanity.js playwright
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_cli_codegen_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   npm install ${PLAYWRIGHT_TGZ}
 | |
| 
 | |
|   echo "Running playwright codegen"
 | |
|   OUTPUT=$(PWTEST_CLI_EXIT=1 xvfb-run --auto-servernum -- bash -c "npx playwright codegen")
 | |
|   if [[ "${OUTPUT}" != *"@playwright/test"* ]]; then
 | |
|     echo "ERROR: missing @playwright/test in the output"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"page.close"* ]]; then
 | |
|     echo "ERROR: missing page.close in the output"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "Running playwright codegen --target=python"
 | |
|   OUTPUT=$(PWTEST_CLI_EXIT=1 xvfb-run --auto-servernum -- bash -c "npx playwright codegen --target=python")
 | |
|   if [[ "${OUTPUT}" != *"chromium.launch"* ]]; then
 | |
|     echo "ERROR: missing chromium.launch in the output"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"browser.close"* ]]; then
 | |
|     echo "ERROR: missing browser.close in the output"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_driver_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_TGZ}
 | |
| 
 | |
|   echo "Running playwright install"
 | |
|   PLAYWRIGHT_BROWSERS_PATH="0" npx playwright install
 | |
| 
 | |
|   copy_test_scripts
 | |
|   echo "Running driver-client.js"
 | |
|   PLAYWRIGHT_BROWSERS_PATH="0" node driver-client.js
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_test_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   npm install ${PLAYWRIGHT_TEST_TGZ}
 | |
|   copy_test_scripts
 | |
| 
 | |
|   echo "Running playwright test without install"
 | |
|   if npx playwright test -c .; then
 | |
|     echo "ERROR: should not be able to run tests without installing browsers"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "Running playwright install"
 | |
|   PLAYWRIGHT_BROWSERS_PATH="0" npx playwright install
 | |
| 
 | |
|   echo "Running playwright test"
 | |
|   PLAYWRIGHT_JSON_OUTPUT_NAME=report.json PLAYWRIGHT_BROWSERS_PATH="0" npx playwright test -c . --browser=all --reporter=list,json sample.spec.js
 | |
| 
 | |
|   echo "Checking the report"
 | |
|   node ./read-json-report.js ./report.json
 | |
| 
 | |
|   echo "Running sanity.js"
 | |
|   node sanity.js "@playwright/test"
 | |
|   if [[ "${NODE_VERSION}" == *"v14."* ]]; then
 | |
|     echo "Running esm.js"
 | |
|     node esm-playwright-test.mjs
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function test_playwright_test_stacks_should_work {
 | |
|   initialize_test "${FUNCNAME[0]}"
 | |
| 
 | |
|   npm install ${PLAYWRIGHT_CORE_TGZ}
 | |
|   npm install ${PLAYWRIGHT_TEST_TGZ}
 | |
|   PLAYWRIGHT_BROWSERS_PATH="0" npx playwright install chromium
 | |
|   copy_test_scripts
 | |
| 
 | |
|   echo "Running playwright test"
 | |
|   OUTPUT=$(DEBUG=pw:api npx playwright test -c . failing.spec.js || true)
 | |
|   if [[ "${OUTPUT}" != *"expect.toHaveText started"* ]]; then
 | |
|     echo "ERROR: missing 'expect.toHaveText started' in the output"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [[ "${OUTPUT}" != *"failing.spec.js:5:38"* ]]; then
 | |
|     echo "ERROR: missing 'failing.spec.js:5:38' in the output"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   echo "${FUNCNAME[0]} success"
 | |
| }
 | |
| 
 | |
| function initialize_test {
 | |
|   cd ${TEST_ROOT}
 | |
|   local TEST_NAME="./$1"
 | |
|   echo "====================================================================================="
 | |
|   echo "====================================================================================="
 | |
|   echo
 | |
|   echo "  RUNNING TEST:  ${TEST_NAME}"
 | |
|   echo
 | |
|   echo "====================================================================================="
 | |
|   echo "====================================================================================="
 | |
|   mkdir ${TEST_NAME} && cd ${TEST_NAME} && npm init -y
 | |
| }
 | |
| 
 | |
| # Run all tests
 | |
| # Script will terminate if there's some error somewhere.
 | |
| run_tests
 | |
| 
 | |
| echo
 | |
| echo "SUCCESS!"
 |