LRR/test/SeleniumAya/test_bug48.py

157 lines
5.7 KiB
Python
Raw Permalink Normal View History

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()