From 6799730a991a2b52a65f92655c0ac79d13cde4b4 Mon Sep 17 00:00:00 2001 From: Ada Werefox Date: Tue, 17 Jan 2023 23:16:49 +0000 Subject: [PATCH] Added test code for the root domain and debug mode for test script. TODO: Implement RobotFramework and switch Dockerfile to use requirement.txt --- README.md | 6 +++ run_tests.sh | 16 +++++-- tests/docker-compose.yml | 2 +- tests/requirements.txt | 1 + tests/test_suite/root_domain_test.py | 65 ++++++++++++++++++++++++++++ tests/test_suite/test.py | 12 ----- 6 files changed, 85 insertions(+), 17 deletions(-) create mode 100755 tests/requirements.txt create mode 100644 tests/test_suite/root_domain_test.py delete mode 100644 tests/test_suite/test.py diff --git a/README.md b/README.md index aee205d..ffa4d8d 100755 --- a/README.md +++ b/README.md @@ -28,6 +28,12 @@ That will start up a docker compose setup with a Selenium standalone server and For now, this will just run a test that opens the browser to [werefox.cafe](https://werefox.cafe) and waits 10 seconds, then closes. Just a small smoke test. +You can also just bring up a selenium-standalone container with: + +``` +./run_tests.sh debug +``` + ## Production You can also use the `deploy.sh` script to start up the container in production mode. diff --git a/run_tests.sh b/run_tests.sh index f6d008e..b4b53f8 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -1,5 +1,13 @@ -#/bin/bash +#!/bin/bash -cd tests/ -docker compose build --no-cache --pull && docker compose up --remove-orphans --abort-on-container-exit --exit-code-from selenium-node -docker compose rm -sf +set -xe + +MODE=$1 + +if [ "$MODE" == "debug" ]; then + docker run --rm --name selenium-debug -p "4444:4444" -p "7900:7900" -e SE_OPTS="--allow-cors true" --shm-size="2g" selenium/standalone-chrome:108.0 +else + cd tests/ + docker compose build --no-cache --pull && docker compose up --remove-orphans --abort-on-container-exit --exit-code-from selenium-node + docker compose rm -sf +fi diff --git a/tests/docker-compose.yml b/tests/docker-compose.yml index 63b9c06..25e9e79 100644 --- a/tests/docker-compose.yml +++ b/tests/docker-compose.yml @@ -27,4 +27,4 @@ services: - ./test_suite:/tests:ro - ./output:/output:rw user: "1000:1000" - command: 'python3 /tests/test.py' + command: 'python3 /tests/root_domain_test.py' diff --git a/tests/requirements.txt b/tests/requirements.txt new file mode 100755 index 0000000..1b8ec00 --- /dev/null +++ b/tests/requirements.txt @@ -0,0 +1 @@ +selenium>=4.7.2 diff --git a/tests/test_suite/root_domain_test.py b/tests/test_suite/root_domain_test.py new file mode 100644 index 0000000..c3d395c --- /dev/null +++ b/tests/test_suite/root_domain_test.py @@ -0,0 +1,65 @@ +#!/usr/bin/python + +# Necessary imports +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 + +def check_subdomains(driver): + # setup wait and grab original tab/window + wait = WebDriverWait(driver, 10) + main_tab = driver.current_window_handle + + # Try to grab button elements of maintained subdomains + try: + sites = driver.find_element(By.TAG_NAME, "nav").find_elements(By.XPATH, "./div/div") + except: + print("Couldn't find the element.") + driver.close() + driver.quit() + return False + + # Iterate through subdomains + for e in sites: + try: + link_element = e.find_element(By.XPATH, "./a") + link_element.click() + wait.until(expected_conditions.number_of_windows_to_be(2)) + for window_handle in driver.window_handles: + if window_handle != main_tab: + driver.switch_to.window(window_handle) + driver.close() + driver.switch_to.window(main_tab) + except: + print("Couldn't find the element somewhere...") + driver.close() + driver.quit() + return False + + return True + +def execute_tests(): + # Set up webdriver and necessary variables for later + chrome_options = webdriver.ChromeOptions() + print('Attempting to establish connection to remote webdriver...') + driver = webdriver.Remote(command_executor='http://192.168.0.202:4444', options=chrome_options) + print('Connection established.') + + # Load requested site + print('Attempting to get page...') + driver.get("https://werefox.cafe") + print('Page loaded.') + + # Check all the subdomain buttons work + print('Attempting to click through subdomain buttons...') + if(check_subdomains(driver)): + print('Test succeeded.') + else: + print('Test failed.') + + # Close browser and lean up + driver.close() + driver.quit() + +execute_tests() diff --git a/tests/test_suite/test.py b/tests/test_suite/test.py deleted file mode 100644 index 828b7da..0000000 --- a/tests/test_suite/test.py +++ /dev/null @@ -1,12 +0,0 @@ -from selenium import webdriver -from time import sleep -chrome_options = webdriver.ChromeOptions() -print('Attempting to establish connection to remote webdriver...') -driver = webdriver.Remote(command_executor='http://selenium-hub:4444', options=chrome_options) -print('Connection established.') -print('Attempting to get page...') -driver.get("https://werefox.cafe") -print('Page loaded.') -sleep(10) -driver.close() -driver.quit()