LRR/test/SeleniumIbrahim/test_kit/student.py

235 lines
7.5 KiB
Python

from actor import Actor
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import os
import traceback
class Student(Actor):
"""
This class contains all the major scenarios a student system actor can execute
automated by Selenium framework.
Attributes:
- password: password string.
- student_id: student ID number.
- utility: a utility object of the MyUtility class.
Methods:
- signup(): automates student registration process.
- join_course(): automates student joining a course created by instructor.
- submit_assignment(): automates student assignment submission process.
- request_remarking(): automates student requesting lab report remarking request.
- create_course_group(): automates student creating course group.
- join_course_group(): automates student joining course group.
TODO:
- join_course_group()
"""
def __init__(self, password, student_id, utility):
super().__init__(password, student_id)
self.utility = utility
def join_course(self):
""" This metohd automates student joining a course created by instructor.
Returns:
- driver: selenium.webdriver object, or
- 1 on failure to complete case execution.
"""
try:
#Login in order to join a course.
driver = self.utility.login(self)
#Search for course by its code.
wait = WebDriverWait(driver, 10)
course_code_field = wait.until(EC.presence_of_element_located((By.ID, "search_field")))
course_code = self.utility.getCourseCode()
course_code_field.send_keys(course_code)
find_btn = driver.find_element(By.ID, "find_btn")
find_btn.click()
#Wait until the course is found, and join.
wait2 = WebDriverWait(driver, 10)
join_btn = wait2.until(EC.element_to_be_clickable((By.ID, "join_btn")))
join_btn.click()
#If joined course successfully, proceed.
wait3 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div[1]/span")))
return 0
#Else, if exception happened, abort.
except:
print("There was a problem executing this test case")
print("Error in \"join_course()\" method, see error_log.txt for more details")
err_msg = traceback.format_exc()
self.utility.log_error(err_msg)
print("Treminating session")
self.utility.killSession(driver)
return 1
def submit_assignment(self):
""" This method automates student assignment submission process.
Returns:
- 0 on success.
- 1 on failure to complete case execution.
"""
try:
#Join the course to submit assignmment.
driver = self.utility.login(self)
#Navigate to course page.
self.utility.open_course_page(driver)
#Locate and click assignment submission button.
wait2 = WebDriverWait(driver, 10)
assignment_card = wait2.until(EC.element_to_be_clickable((By.ID, "submit_lab_report_btn")))
assignment_card.click()
#Locate the assignment submission form and fill in the required data.
wait3 = WebDriverWait(driver, 10)
assignment_form = wait3.until(EC.presence_of_element_located((By.ID, "submit_lab_report_form")))
title = assignment_form.find_element(By.ID, "title")
dateStr = self.utility.getTodayDate()
timeStr = self.utility.getTime()
title.send_keys("TESTSUBMISSIOM"+dateStr+timeStr)
attachment = assignment_form.find_element(By.ID, "attachment1")
attachment.send_keys(os.getcwd()+"/DUMMY_SUBMISSION.txt")
submit = driver.find_element(By.ID, "submit_lab_assignment_btn")
submit.click()
return 0
except:
print("There was a problem executing this test case")
print("Error in \"submit_assignment()\" method, see error_log.txt for more details")
err_msg = traceback.format_exc()
self.utility.log_error(err_msg)
print("Treminating session")
self.utility.killSession(driver)
return 1
def request_remarking(self):
""" This method automates student creating course group.
Returns:
- 0 on success.
- 1 on failure to complete case execution.
"""
try:
#Login in order to proceed to remarking request.
driver = self.utility.login(self)
#Locate the course by its code and open the course page.
self.utility.open_course_page(driver)
#Locate the remarking request button and click it.
wait2 = WebDriverWait(driver, 10)
marked_tab = wait2.until(EC.presence_of_element_located((By.ID, "marked_tab")))
marked_tab.click()
req_remark = driver.find_element(By.ID, "request_remarking_btn")
req_remark.click()
#Fill in the remarking form and submit.
wait3 = WebDriverWait(driver, 10)
alert = wait3.until(EC.alert_is_present())
alert.send_keys("TESTREASON")
alert.accept()
return 0
except:
print("There was a problem executing this test case")
print("Error in \"request_remarking()\" method, see error_log.txt for more details")
err_msg = traceback.format_exc()
self.utility.log_error(err_msg)
print("Treminating session")
self.utility.killSession(driver)
return 1
def create_course_group(self):
""" This method automates student requesting lab report remarking request.
Returns:
- 0 on success.
- 1 on failure to complete case execution.
"""
try:
#Login in order to create course group.
driver = self.utility.login(self)
#Locate the course in which the group to be created.
self.utility.open_course_page(driver)
#Locate the create course group button and click it.
wait2 = WebDriverWait(driver, 10)
create_group = wait2.until(EC.presence_of_element_located((By.ID, "create_group_btn")))
create_group.click()
#Fill in the course group form and create.
wait3 = WebDriverWait(driver, 10)
group_form = wait3.until(EC.presence_of_element_located((By.ID, "frm")))
timeStr = self.utility.getTime()
dateStr = self.utility.getTodayDate()
group_name = group_form.find_element(By.ID, "group_name")
group_name.send_keys("TESTGROUP"+str(dateStr)+str(timeStr))
create = driver.find_element(By.XPATH, "/html/body/div[7]/div[2]/div/button[1]")
create.click()
return 0
except:
print("There was a problem executing this test case")
print("Error in \"create_course_group()\" method, see error_log.txt for more details")
err_msg = traceback.format_exc()
self.utility.log_error(err_msg)
print("Treminating session")
self.utility.killSession(driver)
return 1
def join_course_group(self):
pass
def search_course_after_signup(self, name, email, password):
""" This method automates student searching for a course after signing up.
Returns:
- 0: on success
- 1 on failure to complete case execution.
"""
try:
#Signup first.
driver = self.utility.signup(name, email, password)
#Search for course by its code.
wait = WebDriverWait(driver, 10)
course_code_field = wait.until(EC.presence_of_element_located((By.ID, "search_field")))
course_code = self.utility.getCourseCode()
course_code_field.send_keys(course_code)
find_btn = driver.find_element(By.ID, "find_btn")
find_btn.click()
#Wait until the course is found (i.e The join button will appear when the course is found)
join_btn = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "join_btn")))
return 0
#Else, if an exception occurs, log the error and abort.
except:
print("There was a problem executing this test case")
print("Error in \"search_course_after_signup()\" method, see error_log.txt for more details")
err_msg = traceback.format_exc()
self.utility.log_error(err_msg)
print("Treminating session")
self.utility.killSession(driver)
return 1