Slightly modified test runner script to specify test suite for debugging, implemented tests for info.werefox.cafe root page.
This commit is contained in:
parent
e2e4e9b175
commit
fd2a56fac4
@ -3,6 +3,7 @@
|
|||||||
set -xe
|
set -xe
|
||||||
|
|
||||||
MODE=$1
|
MODE=$1
|
||||||
|
TEST=$2
|
||||||
|
|
||||||
if [ "$MODE" == "--debug-server" ] || [ "$MODE" == "-s" ]; then
|
if [ "$MODE" == "--debug-server" ] || [ "$MODE" == "-s" ]; then
|
||||||
docker run --rm --name selenium-debug-server -p "4444:4444" -p "7900:7900" -e SE_OPTS="--allow-cors true" --shm-size="2g" selenium/standalone-chrome:108.0
|
docker run --rm --name selenium-debug-server -p "4444:4444" -p "7900:7900" -e SE_OPTS="--allow-cors true" --shm-size="2g" selenium/standalone-chrome:108.0
|
||||||
@ -12,7 +13,7 @@ elif [ "$MODE" == "--debug-node" ] || [ "$MODE" == "-n" ]; then
|
|||||||
-v $(pwd)/tests/test_suite:/tests \
|
-v $(pwd)/tests/test_suite:/tests \
|
||||||
-v $(pwd)/tests/output:/output \
|
-v $(pwd)/tests/output:/output \
|
||||||
-v $(pwd)/src/info/data:/data \
|
-v $(pwd)/src/info/data:/data \
|
||||||
selenium-node:latest robot -d /output /tests/
|
selenium-node:latest robot -d /output /tests/$TEST
|
||||||
|
|
||||||
else
|
else
|
||||||
cd tests/
|
cd tests/
|
||||||
|
38
tests/test_suite/info_root_domain_test.py
Executable file
38
tests/test_suite/info_root_domain_test.py
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
# Necessary imports
|
||||||
|
from robot.api.logger import info
|
||||||
|
from shared_methods import load_data, check_buttons, standardize_url
|
||||||
|
import footer_test
|
||||||
|
|
||||||
|
|
||||||
|
def execute_tests(driver, site_url):
|
||||||
|
filepaths = ['/data/pages.yml', '/data/identities.yml']
|
||||||
|
data = load_data(filepaths)
|
||||||
|
for d in data:
|
||||||
|
temp_url = standardize_url(data[d]['url'])
|
||||||
|
if ('info.werefox.cafe' not in temp_url):
|
||||||
|
data[d]['url'] = f'info.werefox.cafe{temp_url}'
|
||||||
|
else:
|
||||||
|
data[d]['url'] = temp_url
|
||||||
|
|
||||||
|
# Load requested site
|
||||||
|
info('Attempting to get page...')
|
||||||
|
driver.get(site_url)
|
||||||
|
info('Page loaded.')
|
||||||
|
|
||||||
|
info('Attempting to click through subdomain buttons...')
|
||||||
|
# Check all the buttons work
|
||||||
|
if (not check_buttons(driver, data)):
|
||||||
|
info('Test failed.')
|
||||||
|
return False
|
||||||
|
|
||||||
|
# A little bit of setup, grabbing the button elements
|
||||||
|
data = footer_test.load_data()
|
||||||
|
# Check the footer buttons
|
||||||
|
if (not check_buttons(driver, data)):
|
||||||
|
info('Test failed.')
|
||||||
|
return False
|
||||||
|
|
||||||
|
info('Test succeeded.')
|
||||||
|
return True
|
14
tests/test_suite/info_werefox_cafe.resource
Executable file
14
tests/test_suite/info_werefox_cafe.resource
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
*** Settings ***
|
||||||
|
Documentation Import Python functions
|
||||||
|
|
||||||
|
Library info_root_domain_test.py
|
||||||
|
Library shared_methods.py
|
||||||
|
|
||||||
|
|
||||||
|
*** Keywords ***
|
||||||
|
Info Werefox Cafe Test Cases
|
||||||
|
[Arguments] ${site_url}
|
||||||
|
|
||||||
|
${result}= Execute Tests ${driver} ${site_url}
|
||||||
|
|
||||||
|
Should Be True ${result}
|
19
tests/test_suite/info_werefox_cafe.robot
Executable file
19
tests/test_suite/info_werefox_cafe.robot
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
*** Settings ***
|
||||||
|
Documentation Validate functionality of info.werefox.cafe's root page.
|
||||||
|
|
||||||
|
Resource info_werefox_cafe.resource
|
||||||
|
Library webdriver_methods.py
|
||||||
|
Variables shared_vars.py ${remote_url}
|
||||||
|
|
||||||
|
Default Tags positive
|
||||||
|
|
||||||
|
|
||||||
|
*** Variables ***
|
||||||
|
${remote_url} http://192.168.0.202:4444
|
||||||
|
${site_url} https://info.werefox.cafe
|
||||||
|
|
||||||
|
|
||||||
|
*** Test Cases ***
|
||||||
|
Test Werefox Cafe [Documentation] Run Info Werefox Cafe Test Cases.
|
||||||
|
Info Werefox Cafe Test Cases ${site_url}
|
||||||
|
[Teardown] Teardown Webdriver ${driver}
|
@ -1,29 +1,11 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
|
||||||
# Necessary imports
|
# Necessary imports
|
||||||
from selenium.webdriver.common.by import By
|
from robot.api.logger import info
|
||||||
from robot.api.logger import info, error
|
|
||||||
from shared_methods import load_data, check_buttons
|
from shared_methods import load_data, check_buttons
|
||||||
import footer_test
|
import footer_test
|
||||||
|
|
||||||
|
|
||||||
def grab_button_elements(driver):
|
|
||||||
|
|
||||||
# Try to grab button elements of maintained subdomains
|
|
||||||
try:
|
|
||||||
site_lists = driver.find_elements(
|
|
||||||
By.TAG_NAME, "nav")
|
|
||||||
info(site_lists)
|
|
||||||
sites = []
|
|
||||||
for l in site_lists:
|
|
||||||
sites += l.find_elements(By.XPATH, ".//a")
|
|
||||||
except:
|
|
||||||
error("Couldn't find the element.")
|
|
||||||
return []
|
|
||||||
|
|
||||||
return sites
|
|
||||||
|
|
||||||
|
|
||||||
def execute_tests(driver, site_url):
|
def execute_tests(driver, site_url):
|
||||||
filepaths = ['/data/homepage/subdomains.yml', '/data/homepage/other.yml']
|
filepaths = ['/data/homepage/subdomains.yml', '/data/homepage/other.yml']
|
||||||
data = load_data(filepaths)
|
data = load_data(filepaths)
|
||||||
@ -33,20 +15,16 @@ def execute_tests(driver, site_url):
|
|||||||
driver.get(site_url)
|
driver.get(site_url)
|
||||||
info('Page loaded.')
|
info('Page loaded.')
|
||||||
|
|
||||||
# A little bit of setup, grabbing the button elements
|
|
||||||
button_elements = grab_button_elements(driver)
|
|
||||||
|
|
||||||
info('Attempting to click through subdomain buttons...')
|
info('Attempting to click through subdomain buttons...')
|
||||||
# Check all the buttons work
|
# Check all the buttons work
|
||||||
if (not check_buttons(driver, data, button_elements)):
|
if (not check_buttons(driver, data)):
|
||||||
info('Test failed.')
|
info('Test failed.')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# A little bit of setup, grabbing the button elements
|
# A little bit of setup, grabbing the button elements
|
||||||
data = footer_test.load_data()
|
data = footer_test.load_data()
|
||||||
button_elements = footer_test.grab_button_elements(driver)
|
|
||||||
# Check the footer buttons
|
# Check the footer buttons
|
||||||
if (not check_buttons(driver, data, button_elements)):
|
if (not check_buttons(driver, data)):
|
||||||
info('Test failed.')
|
info('Test failed.')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -3,8 +3,10 @@
|
|||||||
# Necessary imports
|
# Necessary imports
|
||||||
from selenium.webdriver.support.ui import WebDriverWait
|
from selenium.webdriver.support.ui import WebDriverWait
|
||||||
from selenium.webdriver.support import expected_conditions
|
from selenium.webdriver.support import expected_conditions
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
from robot.api.logger import info, error
|
from robot.api.logger import info, error
|
||||||
from yaml import load, Loader
|
from yaml import load, Loader
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
def standardize_url(url):
|
def standardize_url(url):
|
||||||
@ -36,26 +38,63 @@ def load_data(filepaths):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def check_buttons(driver, data, button_elements):
|
def grab_button_elements(driver):
|
||||||
|
sites = []
|
||||||
|
|
||||||
|
# Try to grab button elements of maintained subdomains
|
||||||
|
try:
|
||||||
|
site_lists = driver.find_elements(
|
||||||
|
By.TAG_NAME, "nav")
|
||||||
|
for l in site_lists:
|
||||||
|
sites += l.find_elements(By.XPATH, ".//a")
|
||||||
|
site_lists = driver.find_elements(
|
||||||
|
By.TAG_NAME, "footer")
|
||||||
|
for l in site_lists:
|
||||||
|
sites += l.find_elements(By.XPATH, ".//a")
|
||||||
|
except:
|
||||||
|
error("Couldn't find the element.")
|
||||||
|
return []
|
||||||
|
|
||||||
|
return sites
|
||||||
|
|
||||||
|
|
||||||
|
def check_buttons(driver, data):
|
||||||
# Iterate through buttons based on imported data
|
# Iterate through buttons based on imported data
|
||||||
wait = WebDriverWait(driver, 10)
|
wait = WebDriverWait(driver, 10)
|
||||||
main_tab = driver.current_window_handle
|
main_tab = driver.current_window_handle
|
||||||
|
original_page = standardize_url(driver.current_url)
|
||||||
for d in data:
|
for d in data:
|
||||||
try:
|
try:
|
||||||
|
button_elements = grab_button_elements(driver)
|
||||||
try:
|
try:
|
||||||
url = standardize_url(data[d]['url'])
|
url = standardize_url(data[d]['url'])
|
||||||
except:
|
except:
|
||||||
error(f'Some error in grabbing the url from: {d}')
|
error(f'Some error in grabbing the url from: {d}')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
if (url == original_page):
|
||||||
|
info(
|
||||||
|
f'link does not go anywhere, passing. {url} {original_page}')
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
element = [e for e in button_elements if e.text == d][0]
|
element = [e for e in button_elements if e.text == d][0]
|
||||||
info(element.text)
|
info(f'Trying to open link labeled: "{element.text}"')
|
||||||
except:
|
except:
|
||||||
error(
|
error(
|
||||||
f'Button text does not match data file - data: {d} | elements: {[e.text for e in button_elements]}')
|
f'Button text does not match data file - data: {d} | elements: {[e.text for e in button_elements]}')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
target = element.get_attribute('target')
|
||||||
|
info(f'target: {target}')
|
||||||
|
except:
|
||||||
|
error("Couldnt't find attribute 'target'.")
|
||||||
|
|
||||||
element.click()
|
element.click()
|
||||||
|
|
||||||
|
if (url != original_page):
|
||||||
|
if (target == '_blank'):
|
||||||
wait.until(expected_conditions.number_of_windows_to_be(2))
|
wait.until(expected_conditions.number_of_windows_to_be(2))
|
||||||
for window_handle in driver.window_handles:
|
for window_handle in driver.window_handles:
|
||||||
if window_handle != main_tab:
|
if window_handle != main_tab:
|
||||||
@ -68,6 +107,16 @@ def check_buttons(driver, data, button_elements):
|
|||||||
return False
|
return False
|
||||||
driver.close()
|
driver.close()
|
||||||
driver.switch_to.window(main_tab)
|
driver.switch_to.window(main_tab)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
wait.until(
|
||||||
|
expected_conditions.url_changes(url))
|
||||||
|
driver.back()
|
||||||
|
wait.until(
|
||||||
|
expected_conditions.presence_of_all_elements_located)
|
||||||
|
except:
|
||||||
|
error('Could not load page before timeout, I assume.')
|
||||||
|
return False
|
||||||
except:
|
except:
|
||||||
error("Couldn't find the element somewhere...")
|
error("Couldn't find the element somewhere...")
|
||||||
driver.close()
|
driver.close()
|
||||||
|
Loading…
Reference in New Issue
Block a user