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 (CSC1111) - Project Management # elem = WebDriverWait(driver, 10).until( # EC.element_to_be_clickable((By.XPATH, '//div[@class="col-md-8"]/a[1]/div')) # ) # elem.click() # # Find and set the deadline date # elem = driver.find_element(By.NAME, 'deadlinedate') # elem.send_keys('30/12/2024') # Use ISO format # # Find and set the deadline time # elem = driver.find_element(By.NAME, 'deadlinetime') # elem.send_keys('11:59PM') # Enter time # 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() # def test_student_with_weak_password_cannot_sign_up(driver, url, restore_database): # driver.get(url) # driver.maximize_window() # weak_password = '123Abc' # 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(weak_password) # elem = driver.find_element(By.NAME, 'confirmpassword') # elem.send_keys(weak_password) # elem = driver.find_element(By.ID, 'signup_btn') # elem.click() # # Log in Student account # login(driver, url, '202400000001', weak_password) # 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() # def test_student_can_join_course(driver, url, restore_database): # # Student can join (CSC1111) - Project Management # login(driver, url, '201825800050', '123') # driver.maximize_window() # # Search for CSC1111 # elem = driver.find_element(By.NAME, 'search') # elem.send_keys('CSC1111') # elem = driver.find_element(By.CLASS_NAME, 'btn-primary') # elem.click() # elems = driver.find_elements(By.CLASS_NAME, 'btn-default') # assert 'CSC1111' in elems[0].text # # Join # elem = driver.find_element(By.CLASS_NAME, 'btn-success') # find the green Join button # elem.click() # # Log out, then log in to check the course-joining status # logout(driver) # login(driver, url, '201825800050', '123') # elems = driver.find_elements(By.CLASS_NAME, 'btn-default') # assert 'CSC1111' in elems[0].text # assert 'Project Management' in elems[0].text # assert 'Joined' in elems[0].text # def test_student_can_submit_assignment(driver, url, restore_database): # ''' Note: Make sure the fields Posted_Date and Deadline in the second row of lab_reports_table are in the current year''' # # Student can submit assignment for CSC1111 # login(driver, url, '201825800050', '123') # driver.maximize_window() # # Enter into the course and the find the assignment # elems = driver.find_elements(By.CLASS_NAME, 'btn-default') # elems[1].click() # elem = driver.find_element(By.XPATH, '//div[@id="menu1"]/div/div/p/a[text()="Submit"]') # find the submit button # elem.click() # # Fill submission title, attach file, and submit # elem = driver.find_element(By.NAME, 'title') # elem.send_keys('Assignment submission from Mohamed') # elem = driver.find_element(By.NAME, 'attachment1') # elem.send_keys('/home/mrlan/Downloads/test/SeleniumHui/helper.py') # attach a file # elem = driver.find_element(By.XPATH, '//form/button') # elem.click() # # Go the Submitted tab # elem = driver.find_element(By.ID, 'myTab') # elems = elem.find_elements(By.CLASS_NAME, 'nav-link') # elems[2].click() # elem = driver.find_element(By.XPATH, '//div[@id="menu3"]/div') # assert 'Reading 2 (6 Marks)' in elem.text # assert 'SUBMITTED' in elem.text # assert 'helper.py' in elem.text # def test_student_can_request_remarking(driver, url, restore_database): # # Student logs in # login(driver, url, '201825800050', '123') # driver.maximize_window() # # Enter into the course # elems = driver.find_elements(By.CLASS_NAME, 'btn-default') # elems[1].click() # # Go the Marked tab # elem = driver.find_element(By.ID, 'myTab') # elems = elem.find_elements(By.CLASS_NAME, 'nav-link') # elems[3].click() # # Send remarking request # remarking_buttons = driver.find_elements(By.CLASS_NAME, 'btn-light') # remarking_buttons[0].click() # alert = driver.switch_to.alert # alert.send_keys('I need higher marks, teacher.') # alert.accept() # elem = driver.find_element(By.XPATH, '//div[@id="menu4"]/div/div/p/span') # assert 'Remarking request sent' == elem.text # def test_lecturer_can_mark_assignment(driver, url, restore_database): # # Lecturer lanhui@qq.com logs in # driver.maximize_window() # login(driver, url, 'lanhui@qq.com', '123') # # Enter into the course and the find the assignment # elem = driver.find_element(By.XPATH, '//div[1]/a[3]/div') # course Software Engineering # elem.click() # elem = driver.find_element(By.XPATH, '//div[2]/div[2]/div/a[2]') # View link # elem.click() # elem = driver.find_element(By.CLASS_NAME, 'btn-primary') # Blue Mark button # elem.click() # # Submit mark and comment # elem = driver.find_element(By.NAME, 'marks') # elem.send_keys('1') # elem = driver.find_element(By.NAME, 'feedback') # elem.send_keys('Inadequate') # form = driver.find_element(By.ID, 'submit-form') # form.submit() # elem = driver.find_element(By.ID, 'myTab') # elems = elem.find_elements(By.CLASS_NAME, 'nav-link') # assert 'Marked submissions (1)' == elems[1].text # elems[1].click() # elem = driver.find_element(By.XPATH, "//div[@id='menu2']/div/b") # assert 'Reading 1 submission' in elem.text # def test_lecturer_cannot_see_tas_not_from_his_course(driver, url, restore_database): # # Lecturer lanhui@qq.com logs in # driver.maximize_window() # login(driver, url, 'peter@qq.com', '123') # elem = driver.find_element(By.ID, 'admin_tab') # elem.click() # tab = driver.find_element(By.ID, 'existing_accounts_tab') # tab.click() # elem = driver.find_element(By.ID, 'tab-existing-accounts') # assert 'No TA' in elem.text # # Logout # logout(driver) # driver.quit()