from helper import login, logout import time import pytest from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import Select def test_attempt_recovery_with_unanswered_security_questions(driver, url, restore_database): # Student goodstd@qq.com with no answered questions driver.get(url) driver.maximize_window() elem = driver.find_element(By.ID, 'goRecover') elem.click() elem = driver.find_element(By.NAME, 'email') elem.send_keys("goodstd@qq.com") elem = driver.find_element(By.ID, 'rec') elem.click() wait = WebDriverWait(driver, 10) alert_elem = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "alert-warning"))) assert "no security questions found for this user." in alert_elem.text.lower() driver.quit() def test_set_security_questions(driver, url, restore_database): # Student goodstd@qq.com logs in driver.get(url) driver.maximize_window() login(driver, url, 'goodstd@qq.com', '[123Abc]') question1 = driver.find_element(By.ID, 'security_question1') question2 = driver.find_element(By.ID, 'security_question2') select_question1 = Select(question1) select_question1.select_by_index(1) select_question2 = Select(question2) select_question2.select_by_index(2) answer1 = driver.find_element(By.ID, 'security_answer1') answer1.send_keys("mImI") answer2 = driver.find_element(By.ID, 'security_answer2') answer2.send_keys("TitaNic") submit_button = driver.find_element(By.ID, 'submit_recovery') submit_button.click() # Assertion: Check if password recovery confirmation or success message appears WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'alertgood'))) recovery_success = driver.find_element(By.ID, 'alertgood') assert recovery_success.is_displayed(), "Password recovery failed or confirmation message not displayed." logout(driver) #Log in Student account login(driver, url, 'goodstd@qq.com', '[123Abc]') elems = driver.find_elements(By.CLASS_NAME, 'nav-link') assert 'Student ID' in elems[0].text assert 'Good Std' in elems[0].text driver.quit() def test_password_recover_wrong_answers(driver, url, restore_database): # Student goodstd2@qq.com recover password --> wrong answers driver.get(url) driver.maximize_window() elem = driver.find_element(By.ID, 'goRecover') elem.click() elem = driver.find_element(By.NAME, 'email') elem.send_keys("goodstd2@qq.com") elem = driver.find_element(By.ID, 'rec') elem.click() elem = driver.find_element(By.NAME, 'answer1') elem.send_keys("wrong") elem = driver.find_element(By.NAME, 'answer2') elem.send_keys("wrong") elem = driver.find_element(By.ID, 'sub') elem.click() driver.quit() def test_recover_password_with_weak_password(driver, url, restore_database): driver.get(url) driver.maximize_window() elem = driver.find_element(By.ID, 'goRecover') elem.click() elem = driver.find_element(By.NAME, 'email') elem.send_keys("goodstd2@qq.com") elem = driver.find_element(By.ID, 'rec') elem.click() elem = driver.find_element(By.NAME, 'answer1') elem.send_keys("Wenzhou") elem = driver.find_element(By.NAME, 'answer2') elem.send_keys("HotPot") elem = driver.find_element(By.ID, 'sub') elem.click() elem = driver.find_element(By.NAME, 'new_password') elem.send_keys("123") elem = driver.find_element(By.NAME, 'confirm_password') elem.send_keys("123") elem = driver.find_element(By.ID, "butt") elem.click() wait = WebDriverWait(driver, 10) alert_elem = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "alert-danger"))) assert "password must be at least 8 characters long and include uppercase and lowercase letters, numbers, and special characters." in alert_elem.text.lower() driver.quit() def test_recover_password_successfully(driver, url, restore_database): # Student goodstd2@qq.com recover password ---> correct answers driver.get(url) driver.maximize_window() elem = driver.find_element(By.ID, 'goRecover') elem.click() elem = driver.find_element(By.NAME, 'email') elem.send_keys("goodstd2@qq.com") elem = driver.find_element(By.ID, 'rec') elem.click() elem = driver.find_element(By.NAME, 'answer1') elem.send_keys("wenzhou") elem = driver.find_element(By.NAME, 'answer2') elem.send_keys("hotpot") elem = driver.find_element(By.ID, 'sub') elem.click() elem = driver.find_element(By.NAME, 'new_password') elem.send_keys("123Abc!!") elem = driver.find_element(By.NAME, 'confirm_password') elem.send_keys("123Abc!!") elem = driver.find_element(By.ID, "butt") elem.click() #Log in Student account login(driver, url, 'goodstd2@qq.com', '123Abc!!') elems = driver.find_elements(By.CLASS_NAME, 'nav-link') assert 'Student ID' in elems[0].text assert 'Good Std2' in elems[0].text driver.quit() def test_recovery_invalid_user_cannot_recover(driver, url, restore_database): # Unrecognizable user cannot recover driver.get(url) driver.maximize_window() elem = driver.find_element(By.ID, 'goRecover') elem.click() elem = driver.find_element(By.NAME, 'email') elem.send_keys("goodstd3@qq.com") elem = driver.find_element(By.ID, 'rec') elem.click() wait = WebDriverWait(driver, 10) alert_elem = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "alert-danger"))) assert "email address is not recognized." in alert_elem.text.lower() driver.quit()