157 lines
5.7 KiB
Python
157 lines
5.7 KiB
Python
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()
|
|
|
|
|
|
|