From 06a209d1933118905d37db2c2398bc3a6cf1caab Mon Sep 17 00:00:00 2001 From: Damien LACHAUME / PALO-IT Date: Wed, 31 Jan 2024 10:40:43 +0100 Subject: [PATCH] refactor: use common script for headless browser tests --- .../run-wasm-tests-browser-headless.py | 44 +++++++++++++++++++ .../run-wasm-tests-firefox-headless.py | 21 --------- .github/workflows/test-client.yml | 9 ++-- 3 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/scripts/run-wasm-tests-browser-headless.py delete mode 100755 .github/workflows/scripts/run-wasm-tests-firefox-headless.py diff --git a/.github/workflows/scripts/run-wasm-tests-browser-headless.py b/.github/workflows/scripts/run-wasm-tests-browser-headless.py new file mode 100644 index 00000000000..86af05779fc --- /dev/null +++ b/.github/workflows/scripts/run-wasm-tests-browser-headless.py @@ -0,0 +1,44 @@ +import logging +import argparse +import sys +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC + +def run_headless_test(): + parser = argparse.ArgumentParser(description='Run headless browser test.') + parser.add_argument('browser_type', choices=['chrome', 'firefox'], help='Browser type (chrome or firefox)') + args = parser.parse_args() + + if args.browser_type.lower() == 'chrome': + options = webdriver.ChromeOptions() + options.add_argument("--headless=new") + driver = webdriver.Chrome(options=options) + elif args.browser_type.lower() == 'firefox': + options = webdriver.FirefoxOptions() + options.add_argument("--headless") + driver = webdriver.Firefox(options=options) + else: + logging.error("Invalid browser type. Supported types are 'chrome' and 'firefox'.") + return + + try: + driver.get('http://localhost:8080/') + + # Adjust the timeout to 3 minutes + wait = WebDriverWait(driver, 180) + + # Wait until the div with id "tests_finished" is displayed + tests_finished_element = wait.until(EC.presence_of_element_located((By.ID, "tests_finished"))) + + html = driver.page_source + result_file = f"{args.browser_type.lower()}-results.html" + with open(result_file, "w", encoding="utf-8") as file: + file.write(html) + + finally: + driver.quit() + +if __name__ == "__main__": + run_headless_test() diff --git a/.github/workflows/scripts/run-wasm-tests-firefox-headless.py b/.github/workflows/scripts/run-wasm-tests-firefox-headless.py deleted file mode 100755 index bea08da1b5d..00000000000 --- a/.github/workflows/scripts/run-wasm-tests-firefox-headless.py +++ /dev/null @@ -1,21 +0,0 @@ -from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC - -options = webdriver.FirefoxOptions() -options.add_argument("--headless") -driver = webdriver.Firefox(options=options) -driver.get("http://localhost:8080/") - -# Adjust the timeout to 3 minutes -wait = WebDriverWait(driver, 180) - -# Wait until the div with id "tests_finished" is displayed -tests_finished_element = wait.until(EC.presence_of_element_located((By.ID, "tests_finished"))) - -html = driver.page_source -with open("firefox-results.html", "w", encoding="utf-8") as file: - file.write(html) - -driver.quit() diff --git a/.github/workflows/test-client.yml b/.github/workflows/test-client.yml index 253a278122b..5d8b27da3b5 100644 --- a/.github/workflows/test-client.yml +++ b/.github/workflows/test-client.yml @@ -218,15 +218,18 @@ jobs: fi done + - name: Install selenium + shell: bash + run: pip install selenium + - name: Run Chrome headless shell: bash run: | - /usr/bin/google-chrome --headless --virtual-time-budget=180000 --timeout=180000 --dump-dom --disable-gpu http://localhost:8080 > chrome-results.html + python3 ./.github/workflows/scripts/run-wasm-tests-browser-headless chrome ./.github/workflows/scripts/parse-wasm-headless-tests-results.sh chrome-results.html - name: Run Firefox headless shell: bash run: | - pip install selenium - python3 ./.github/workflows/scripts/run-wasm-tests-firefox-headless.py + python3 ./.github/workflows/scripts/run-wasm-tests-browser-headless firefox ./.github/workflows/scripts/parse-wasm-headless-tests-results.sh firefox-results.html