diff --git a/test/SeleniumNeil/conftest.py b/test/SeleniumNeil/conftest.py deleted file mode 100644 index d87742d..0000000 --- a/test/SeleniumNeil/conftest.py +++ /dev/null @@ -1,48 +0,0 @@ -import os -import pytest -from selenium import webdriver - -@pytest.fixture -def restore_database(): - ''' Restore the database. - It is useful for making sure that each end-to-end test - starts with the same database. - Benefit: we can reproduce the same test result. - ''' - - PASSWORD = '' # root password - DB_NAME = 'lrr' # database name used for LRR - - # commands used to import data to DB_NAME - cmds = [ - f'mysql -u root -p{PASSWORD} -e "DROP DATABASE IF EXISTS {DB_NAME};"', - f'mysql -u root -p{PASSWORD} -e "CREATE DATABASE {DB_NAME};"', - f'mysql -u root -p{PASSWORD} -e "GRANT ALL PRIVILEGES ON {DB_NAME}.* TO lrr@localhost WITH GRANT OPTION;"', - f'mysql -u root -p{PASSWORD} {DB_NAME} < C:\\xampp\\htdocs\\LRR\\lrr_database.sql'] #make sure th link of the database is ok - - try: - for command in cmds: - os.system(command) - except Exception as e: - print(f"Error restoring database: {e}") - - return None -@pytest.fixture -def url(): - return 'http://localhost/LRR/' # URL of LRR - - -@pytest.fixture -def driver(): - return webdriver.Chrome() - - -@pytest.fixture -def admin_username(): - return 'admin@qq.com' - - -@pytest.fixture -def admin_password(): - return '123' - diff --git a/test/SeleniumNeil/test_cases.py b/test/SeleniumNeil/test_bug352_neil.py similarity index 77% rename from test/SeleniumNeil/test_cases.py rename to test/SeleniumNeil/test_bug352_neil.py index c15e17b..283998c 100644 --- a/test/SeleniumNeil/test_cases.py +++ b/test/SeleniumNeil/test_bug352_neil.py @@ -10,9 +10,11 @@ from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC -def test_function_1(restore_database): + +def test_restore_database(restore_database): assert restore_database is None -@pytest.mark.skip(reason="function to be used in the test_scripts") + + def createTA(driver, TA_name, emails, password): full_name = driver.find_element('name', 'fullname') full_name.send_keys(TA_name) @@ -25,56 +27,58 @@ def createTA(driver, TA_name, emails, password): click_create = driver.find_element('name', 'create_btn') click_create.click() -def login_lecturer(drivers): + +def login_lecturer(driver, url): # Open the website - drivers.get("http://localhost/LRR/") - drivers.maximize_window() + driver.get(url) + driver.maximize_window() - username_input = drivers.find_element('name', "user") + username_input = driver.find_element('name', "user") - password_input = drivers.find_element('name', "password") + password_input = driver.find_element('name', "password") - login_button = drivers.find_element('id', "login_btn") + login_button = driver.find_element('id', "login_btn") # login as a Lecturer username_input.send_keys("admin@qq.com") password_input.send_keys("123") # Click the login button - time.sleep(10) + time.sleep(2) login_button.click() - admin_tab = drivers.find_element('id', 'admin_tab') + admin_tab = driver.find_element('id', 'admin_tab') admin_tab.click() - cte_instructor = drivers.find_element('id', 'tab_ins_accounts') + cte_instructor = driver.find_element('id', 'tab_ins_accounts') cte_instructor.click() - time.sleep(15) + time.sleep(2) -def test_createTA(): - driver_open = webdriver.Chrome() + +def test_createTA(driver, url): + driver_open = driver driver_open.maximize_window() - login_lecturer(driver_open) + login_lecturer(driver_open, url) try: fullname = "lanhuitest1" email = "lanhuitest1@qq.com" password = "new1452345678" createTA(driver_open, fullname, email,password) # CREATE A TA WITH FULLNAME lanhuitest1 email lanhuitest1@qq.com password new1452345678 - get_output = WebDriverWait(driver_open, 10).until( + get_output = WebDriverWait(driver_open, 20).until( EC.element_to_be_clickable((By.ID, "tab_ins_accounts")) ) get_output.click() get_output_msg = driver_open.find_element(By.CLASS_NAME, "alert-warning") txt_alert = get_output_msg.text - time.sleep(10) + time.sleep(2) if txt_alert.find("TA user created successfully") == 0: logout_button = WebDriverWait(driver_open, 20).until( EC.element_to_be_clickable( (By.XPATH, "//a[contains(@class, 'nav-link') and contains(@href, 'logout.php')]")) ) - time.sleep(13) + time.sleep(2) logout_button.click() - time.sleep(5) + time.sleep(2) username_input = driver_open.find_element('name', "user") password_input = driver_open.find_element('name', "password") login_button = driver_open.find_element('id', "login_btn") @@ -82,28 +86,28 @@ def test_createTA(): username_input.send_keys(email) # login with credentials of the created TA password_input.send_keys(password) # Click the login button - time.sleep(10) + time.sleep(2) login_button.click() - time.sleep(5) + time.sleep(2) elif txt_alert.find("Email address ") == 0: - time.sleep(10) + time.sleep(2) driver_open.quit() else: driver_open.quit() - time.sleep(5) + time.sleep(2) finally: driver_open.quit() -def test_generate_password(): - driver_open = webdriver.Chrome() - login_lecturer(driver_open) +def test_generate_password(driver, url): + driver_open = driver + login_lecturer(driver_open, url) try: fullname = "lanhuitest2" email = "lanhuitest2@qq.com" @@ -111,16 +115,16 @@ def test_generate_password(): createTA(driver_open, fullname, email, password) # CREATE A TA WITH FULLNAME lanhuitest2 email lanhuitest2@qq.com password "" - get_output = WebDriverWait(driver_open, 15).until( + get_output = WebDriverWait(driver_open, 20).until( EC.element_to_be_clickable((By.ID, "tab_ins_accounts")) ) get_output.click() get_output_msg = driver_open.find_element(By.CLASS_NAME, "alert-warning") txt_alert = get_output_msg.text - time.sleep(10) + time.sleep(2) if txt_alert.find("TA user created successfully") == 0: - time.sleep(15) + time.sleep(2) email_pattern = r"Use email (\S+) as account name" password_pattern = r" (\S+)\ as password." email_match = re.search(email_pattern, txt_alert) @@ -129,12 +133,12 @@ def test_generate_password(): # Extract email and password from the matches email = email_match.group(1) password = password_match.group(1) - logout_button = WebDriverWait(driver_open, 15).until( + logout_button = WebDriverWait(driver_open, 20).until( EC.element_to_be_clickable( (By.XPATH, "//a[contains(@class, 'nav-link') and contains(@href, 'logout.php')]")) ) logout_button.click() - time.sleep(15) + time.sleep(2) username_input = driver_open.find_element('name', "user") password_input = driver_open.find_element('name', "password") login_button = driver_open.find_element('id', "login_btn") @@ -142,27 +146,28 @@ def test_generate_password(): username_input.send_keys(email) # login with credentials of the created TA password_input.send_keys(password) # Click the login button - time.sleep(15) + time.sleep(2) login_button.click() - time.sleep(5) + time.sleep(2) elif txt_alert.find("Email address ") == 0: - time.sleep(15) + time.sleep(2) driver_open.quit() else: driver_open.quit() - time.sleep(5) + time.sleep(2) finally: driver_open.quit() -def test_existingTA(): - driver_open = webdriver.Chrome() - login_lecturer(driver_open) + +def test_existingTA(driver, url, restore_database): + driver_open = driver + login_lecturer(driver, url) try: # Use email nreyes@example.com as account name and new1452345678 as password. fullname = "lanhuitest1" @@ -171,26 +176,26 @@ def test_existingTA(): createTA(driver_open, fullname, email, password) # CREATE A TA WITH FULLNAME lanhuitest1 email lanhuitest1@qq.com password new1452345678 - get_output = WebDriverWait(driver_open, 10).until( + get_output = WebDriverWait(driver_open, 20).until( EC.element_to_be_clickable((By.ID, "tab_ins_accounts")) ) get_output.click() get_output_msg = driver_open.find_element(By.CLASS_NAME, "alert-warning") txt_alert = get_output_msg.text - time.sleep(15) + time.sleep(2) if txt_alert.find("TA user created successfully") == 0: - time.sleep(5) + time.sleep(2) elif txt_alert.find("Email address ") == 0: - time.sleep(15) + time.sleep(2) driver_open.quit() else: driver_open.quit() - time.sleep(5) + time.sleep(2) finally: driver_open.quit()