LRR/testWithZayid/SeleniumHui/test_lrr.py

209 lines
6.9 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
def test_admin_can_create_lecturer_account(
driver, url, admin_username, admin_password, restore_database
):
# Administrator (admin@qq.com, password 123) logs in
driver.maximize_window()
login(driver, url, admin_username, admin_password)
# Create a Lecturer account for Mr Lan (mrlan@qq.com, password [123Abc!])
tab = driver.find_element(By.ID, "tab_ins_accounts")
tab.click()
elem = driver.find_element(By.NAME, "fullname")
elem.send_keys("Mr Lan")
elem = driver.find_element(By.NAME, "email")
elem.send_keys("mrlan@qq.com")
elem = driver.find_element(By.NAME, "password")
elem.send_keys("123Abc!!")
radio_button = driver.find_element(By.NAME, "type")
radio_button.click()
button = driver.find_element(By.NAME, "create_btn")
button.click()
# Log out Admin account
logout(driver)
# Log in Lecturer account
login(driver, url, "mrlan@qq.com", "123Abc!!")
elems = driver.find_elements(By.CLASS_NAME, "nav-link")
assert "(Lecturer)" in elems[0].text
assert "Mr Lan" in elems[0].text
driver.quit()
def test_lecturer_can_create_course(driver, url, restore_database):
# Lecturer lanhui@qq.com logs in
driver.maximize_window()
login(driver, url, "lanhui@qq.com", "123")
# Create a course called CSC1001 Advanced Software Engineering, 2024
elem = driver.find_element(By.NAME, "name")
elem.send_keys("Advanced Software Engineering")
elem = driver.find_element(By.NAME, "code")
elem.send_keys("CSC1001")
elem = driver.find_element(By.NAME, "academic")
elem.send_keys("2004")
elem = driver.find_element(By.NAME, "faculty")
elem.send_keys("School of Computer Science and Technology")
elem = driver.find_element(By.CLASS_NAME, "btn-primary")
elem.click()
elems = driver.find_elements(By.CLASS_NAME, "btn-default")
last_elem = elems[-1]
assert "Advanced Software Engineering" in last_elem.text
assert "(CSC1001)" in last_elem.text
# Logout
logout(driver)
driver.quit()
def test_lecturer_can_post_assignment(driver, url, restore_database):
# Lecturer lanhui@qq.com logs in
driver.maximize_window()
login(driver, url, "lanhui@qq.com", "123")
# Create an assignment called Take-home quiz 1 for course (P.M2019) - Project Management
elems = driver.find_elements(By.CLASS_NAME, "btn-default")
elems[1].click()
elem = driver.find_element(By.NAME, "deadlinedate")
elem.send_keys("002024/12/30")
elem = driver.find_element(By.NAME, "deadlinetime")
elem.send_keys("23:59")
elem = driver.find_element(By.NAME, "title")
elem.send_keys("Take-home quiz 1")
elem = driver.find_element(By.NAME, "instructions")
elem.send_keys("This is a closed-book quiz.")
elem = driver.find_element(By.NAME, "marks")
elem.send_keys("10")
radio_button = driver.find_element(By.NAME, "type")
radio_button.click()
elem = driver.find_element(By.CLASS_NAME, "btn-primary")
elem.click()
# Check if the assignment has been successfully posted
elem = driver.find_element(By.CLASS_NAME, "card-title")
assert "Take-home quiz 1 (10 Marks, Individual)" in elem.text
elem = driver.find_element(By.CLASS_NAME, "text-muted")
assert "Deadline: 2024-12-30" in elem.text
driver.quit()
def test_lecturer_can_add_student_numbers(driver, url, restore_database):
# Lecturer lanhui@qq.com logs in
driver.maximize_window()
login(driver, url, "lanhui@qq.com", "123")
# Add ASE student numbers
student_numbers = """
202420781739
202420781740
202420781741
202420781742
202420781743
202420781745
202420581366
202420581368
202420581369
202420581370
202420581372
202420581373
202420581374
202420581376
202420581378
202420581381
"""
elem = driver.find_element(By.ID, "admin_tab")
elem.click()
elem = driver.find_element(By.NAME, "users")
elem.send_keys(student_numbers)
elem = driver.find_element(By.ID, "register_btn")
elem.click()
elems = driver.find_elements(By.CSS_SELECTOR, "p")
added = 0
student_lst = [number.strip() for number in student_numbers.strip().split("\n")]
print(student_lst)
for student_no in student_lst:
for elem in elems:
if student_no in elem.text and "added" in elem.text:
added += 1
break
assert added == len(student_lst)
driver.quit()
def test_student_with_valid_student_number_can_sign_up(driver, url, restore_database):
# Student with recognizable student number 202400000001 can sign up an account
driver.get(url)
driver.maximize_window()
elem = driver.find_element(By.ID, "signup_link")
elem.click()
elem = driver.find_element(By.NAME, "fullname")
elem.send_keys("Good Student")
elem = driver.find_element(By.NAME, "user_student_id")
elem.send_keys("202400000001")
elem = driver.find_element(By.NAME, "email")
elem.send_keys("goodstudent@qq.com")
elem = driver.find_element(By.NAME, "password")
elem.send_keys("[123Abc]")
elem = driver.find_element(By.NAME, "confirmpassword")
elem.send_keys("[123Abc]")
elem = driver.find_element(By.ID, "signup_btn")
elem.click()
logout(driver)
# Log in Student account
login(driver, url, "202400000001", "[123Abc]")
elems = driver.find_elements(By.CLASS_NAME, "nav-link")
assert "Student ID" in elems[0].text
assert "Good Student" in elems[0].text
driver.quit()
def test_student_with_invalid_student_number_cannot_sign_up(
driver, url, restore_database
):
# Student with unrecognizable student number cannot sign up an account
driver.get(url)
driver.maximize_window()
elem = driver.find_element(By.ID, "signup_link")
elem.click()
elem = driver.find_element(By.NAME, "fullname")
elem.send_keys("Good Student")
elem = driver.find_element(By.NAME, "user_student_id")
elem.send_keys("202400000002")
elem = driver.find_element(By.NAME, "email")
elem.send_keys("goodstudent@qq.com")
elem = driver.find_element(By.NAME, "password")
elem.send_keys("[123Abc]")
elem = driver.find_element(By.NAME, "confirmpassword")
elem.send_keys("[123Abc]")
elem = driver.find_element(By.ID, "signup_btn")
elem.click()
# Log in Student account
login(driver, url, "202400000002", "[123Abc]")
elems = driver.find_elements(By.CLASS_NAME, "nav-link")
assert not "Student ID" in elems[0].text
assert not "Good Student" in elems[0].text
driver.quit()
@pytest.mark.skip()
def test_student_can_join_course():
# Student can join CSC1001 Advanced Software Engineering
assert True
@pytest.mark.skip()
def test_student_can_submit_assignment():
# Student can submit Take-home quiz 1 for CSC1001
assert True