def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.teacher = Teacher( use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities ) else: self.teacher = Teacher( use_env_vars=True ) self.wait = WebDriverWait(self.student.driver, Assignment.WAIT_TIME) self.teacher.login() # go to student scores self.teacher.select_course(appearance='biology') self.teacher.driver.find_element( By.LINK_TEXT, 'Student Scores').click() self.teacher.wait.until( expect.visibility_of_element_located( (By.XPATH, '//span[contains(text(), "Student Scores")]') ) ).click()
def setUp(self): """Pretest settings.""" if not LOCAL_RUN: self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.student = Student( use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities ) self.teacher = Teacher( existing_driver=self.student.driver, use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities ) else: self.teacher = Teacher( use_env_vars=True ) self.student = Student( use_env_vars=True, existing_driver=self.teacher.driver, ) self.wait = WebDriverWait(self.student.driver, Assignment.WAIT_TIME)
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.teacher = Teacher( use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities ) self.student = Student( use_env_vars=True, existing_driver=self.teacher.driver, pasta_user=self.ps, capabilities=self.desired_capabilities ) self.admin = Admin( use_env_vars=True, existing_driver=self.teacher.driver, pasta_user=self.ps, capabilities=self.desired_capabilities ) else: self.teacher = Teacher( use_env_vars=True ) self.student = Student( use_env_vars=True, existing_driver=self.teacher.driver, ) self.admin = Admin( use_env_vars=True, existing_driver=self.teacher.driver, )
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) else: self.teacher = Teacher(use_env_vars=True)
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) else: self.teacher = Teacher(use_env_vars=True) self.teacher.login() self.teacher.select_course(appearance='college_physics')
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) else: self.teacher = Teacher(use_env_vars=True) self.teacher.login() self.teacher.select_course(appearance='biology') self.teacher.find(By.PARTIAL_LINK_TEXT, 'Performance Forecast').click()
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) else: self.teacher = Teacher(use_env_vars=True) self.teacher.login() self.teacher.find(By.XPATH, '//a[contains(@href,"/cc-dashboard")]').click()
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.teacher = Teacher(username=os.getenv('TEACHER_USER_CC'), password=os.getenv('TEACHER_PASSWORD'), pasta_user=self.ps, capabilities=self.desired_capabilities) else: self.teacher = Teacher( username=os.getenv('TEACHER_USER_CC'), password=os.getenv('TEACHER_PASSWORD'), ) self.teacher.login() if 'cc-dashboard' not in self.teacher.current_url(): courses = self.teacher.find_all(By.CLASS_NAME, 'tutor-booksplash-course-item') assert (courses), 'No courses found.' if not isinstance(courses, list): courses = [courses] course_id = randint(0, len(courses) - 1) self.course = courses[course_id].get_attribute('data-title') self.teacher.select_course(title=self.course) self.teacher.goto_course_roster() try: section = self.teacher.find_all( By.XPATH, '//*[contains(@class,"nav-tabs")]//a') if isinstance(section, list): section = '%s' % section[randint(0, len(section) - 1)].text else: section = '%s' % section.text except Exception: section = '%s' % randint(100, 999) self.teacher.add_course_section(section) self.code = self.teacher.get_enrollment_code(section) print('Course Phrase: ' + self.code) self.book_url = self.teacher.find( By.XPATH, '//a[span[contains(text(),"Online Book")]]').get_attribute('href') self.teacher.find(By.CSS_SELECTOR, 'button.close').click() self.teacher.sleep(0.5) self.teacher.logout() self.teacher.sleep(1) self.student = Student(use_env_vars=True, existing_driver=self.teacher.driver) self.first_name = Assignment.rword(6) self.last_name = Assignment.rword(8) self.email = self.first_name + '.' \ + self.last_name \ + '@tutor.openstax.org'
def test_teacher_select_a_course_8256(self): """Select a course. Steps: Click on a Tutor course name Expected Result: The user selects a course and is presented with the calendar dashboard """ self.ps.test_updates['name'] = 't1.38.003' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 't1', 't1.38', 't1.38.003', '8256' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.user = Teacher( use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities ) self.user.login() self.user.select_course(appearance='physics') assert('calendar' in self.user.current_url()), \ 'Not in a course' self.ps.test_updates['passed'] = True
def test_teacher_bypass_the_course_picker_8257(self): """Bypass the course picker. Steps: Go to Tutor Click on the 'Login' button Enter the teacher user account [ qateacher | password ] in the username and password text boxes Click on the 'Sign in' button Expected Result: The user bypasses the course picker and is presented with the calendar dashboard (because qateacher only has one course) """ self.ps.test_updates['name'] = 't1.38.004' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 't1', 't1.38', 't1.38.004', '8257' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.user = Teacher( use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities ) self.user.login(username="******") assert('calendar' in self.user.current_url()), \ 'Not in a course' self.ps.test_updates['passed'] = True
def setUp(self): """Pretest Settings""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) self.teacher.login()
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) self.CONDENSED_WIDTH = 1105
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) self.teacher.login() self.teacher.select_course(title='HS Physics')
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() if not LOCAL_RUN: self.teacher = Teacher( use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities ) else: self.teacher = Teacher( use_env_vars=True ) self.teacher.login() self.teacher.driver.find_element( By.XPATH, '//p[contains(text(),"OpenStax Concept Coach")]' ).click()
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) self.admin = Admin(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities, existing_driver=self.teacher.driver)
def test_teacher_able_to_search_within_the_book_7629(self): """Able to search within the book. Steps: Go to tutor-qa Click on the 'Login' button Enter the teacher user account in the username and password text boxes Click on the 'Sign in' button If the user has more than one course, click on a CC course name Click "Online Book" in the header Enter search words into the search engine next to the "Contents" button Expected Result: The search word is highlighted in yellow within the text and is bolded within the table of contents """ self.ps.test_updates['name'] = 'cc1.05.005' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['cc1', 'cc1.05', 'cc1.05.005', '7629'] self.ps.test_updates['passed'] = False # Test steps and verification assertions teacher = Teacher( existing_driver=self.student.driver, username=os.getenv('TEACHER_USER'), password=os.getenv('TEACHER_PASSWORD'), pasta_user=self.ps, capabilities=self.desired_capabilities, ) teacher.login() teacher.driver.find_element( By.XPATH, '//a[contains(@href,"/cc-dashboard/")]').click() teacher.wait.until( expect.visibility_of_element_located( (By.XPATH, '//a//span[contains(text(),"Online Book")]'))).click() window_with_book = teacher.driver.window_handles[1] teacher.driver.switch_to_window(window_with_book) assert('cnx' in teacher.current_url()), \ 'Not viewing the textbook PDF' teacher.page.wait_for_page_load() teacher.wait.until( expect.visibility_of_element_located( (By.XPATH, '//input[@placeholder="Search this book"]' ))).send_keys('balance' + Keys.ENTER) # make sure the search worked # still passes if no results found and it says: No matching results... teacher.wait.until( expect.visibility_of_element_located( (By.XPATH, '//div[@class="result-count"]'))) teacher.delete() self.ps.test_updates['passed'] = True
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) self.teacher.login() self.teacher.select_course(appearance='physics') self.teacher.open_user_menu() self.teacher.wait.until( expect.element_to_be_clickable( (By.LINK_TEXT, 'Course Settings and Roster'))).click() self.teacher.page.wait_for_page_load()
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.teacher = Teacher(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) # create a reading for the student to work self.teacher.login() self.teacher.driver.execute_script("window.resizeTo(1920,1080)") self.teacher.select_course(appearance='ap_biology') self.assignment_name = 't1.18 reading-%s' % randint(100, 999) today = datetime.date.today() begin = today.strftime('%m/%d/%Y') end = (today + datetime.timedelta(days=randint(1, 10))) \ .strftime('%m/%d/%Y') self.teacher.add_assignment(assignment='reading', args={ 'title': self.assignment_name, 'description': chomsky(), 'periods': { 'all': (begin, end) }, 'reading_list': ['1.1'], 'status': 'publish', }) self.teacher.wait.until( expect.visibility_of_element_located( (By.XPATH, '//div[contains(@class,"calendar-container")]'))) self.teacher.logout() # login as a student to work the reading self.student = Student(existing_driver=self.teacher.driver, use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) self.student.login() self.student.select_course(appearance='ap_biology') self.student.wait.until( expect.visibility_of_element_located((By.LINK_TEXT, 'This Week'))) reading = self.student.driver.find_element( By.XPATH, '//div[text()="%s"]' % self.assignment_name) self.teacher.driver.execute_script( 'return arguments[0].scrollIntoView();', reading) self.teacher.driver.execute_script('window.scrollBy(0, -80);') reading.click() self.student.driver.set_window_size(width=1300, height=1200)
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.admin = Admin(use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) self.content = ContentQA(existing_driver=self.admin.driver, use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) self.student = Student(existing_driver=self.admin.driver, use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities) self.teacher = Teacher(existing_driver=self.admin.driver, use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities)
def setUp(self): """Pretest settings.""" self.teacher = Teacher(use_env_vars=True, driver_type=DRIVER) self.teacher.username = os.getenv('TEACHER_USER_MULTI', self.teacher.username) self.teacher.set_window_size(height=700, width=1200) self.teacher.login() courses = self.teacher.get_course_list() if len(courses) < 1: raise ValueError('No course available for selection') course = courses[randint(0, len(courses) - 1)] self.teacher.select_course(title=course.get_attribute('data-title')) if not self.__class__.book_sections: self.__class__.book_sections = self.teacher.get_book_sections() if not self.__class__.class_start_end_dates: self.__class__.class_start_end_dates = \ self.teacher.get_course_begin_end() self.book_sections = self.__class__.book_sections self.start_end = self.__class__.class_start_end_dates
def test_teacher_clicks_openstax_logo_to_return_to_dashboard_7991(self): """CLick in the OpenStax logo to return to the dashboard. Steps: Click on the 'Performance Forecast' button Click on the OpenStax logo in the header Expected Result: The teacher is presented with their calendar dashboard """ self.ps.test_updates['name'] = 't1.13.014' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['t1', 't1.13', 't1.13.014', '7991'] self.ps.test_updates['passed'] = False self.teacher.logout() teacher2 = Teacher( username=os.getenv('TEACHER_USER_ONE_COURSE'), password=os.getenv('TEACHER_PASSWORD'), site='https://tutor-qa.openstax.org', existing_driver=self.teacher.driver, pasta_user=self.ps, capabilities=self.desired_capabilities, ) print(teacher2.username) print(teacher2.password) teacher2.login() self.teacher.open_user_menu() self.teacher.driver.find_element( By.CLASS_NAME, 'viewTeacherPerformanceForecast').click() self.teacher.driver.find_element(By.CLASS_NAME, 'ui-brand-logo').click() assert('calendar' in self.teacher.current_url()), \ 'Not viewing the calendar dashboard' self.ps.test_updates['passed'] = True
def test_teacher_view_instructor_notification_112523(self): """View an active instructor-only system notification. Steps: Expected Result: """ self.ps.test_updates['name'] = 't1.57.010' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = ['t1', 't1.57', 't1.57.010', '112523'] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.admin.wait.until( expect.visibility_of_element_located( (By.PARTIAL_LINK_TEXT, 'System Setting'))).click() self.admin.wait.until( expect.visibility_of_element_located( (By.PARTIAL_LINK_TEXT, 'Notifications'))).click() self.admin.sleep(5) self.admin.find( By.XPATH, "//div[3]//input[@id='message']").send_keys('automated test') self.admin.driver.find_elements_by_xpath( "//input[@class='btn btn-default']")[1].click() self.admin.sleep(5) # View notification as student teacher = Teacher(use_env_vars=True) teacher.login() teacher.select_course(appearance='physics') teacher.sleep(10) notifs = teacher.driver.find_elements_by_xpath( "//div[@class='notification system']/span") found = False for notif in notifs: if notif.text.find("automated test") >= 0: found = True teacher.delete() # Delete notification notif = self.admin.driver.find_elements_by_xpath( "//div[@class='col-xs-12']") for index, n in enumerate(notif): if n.text.find('automated test') >= 0: self.admin.driver.find_elements_by_xpath( "//a[@class='btn btn-warning']")[index].click() self.admin.driver.switch_to_alert().accept() self.ps.test_updates['passed'] = True break self.admin.sleep(5) notif = self.admin.driver.find_elements_by_xpath( "//div[@class='col-xs-12']") assert (found), 'notification not seen' self.ps.test_updates['passed'] = True
def setUp(self): """Pretest settings.""" self.ps = PastaSauce() self.desired_capabilities['name'] = self.id() self.student = Student( use_env_vars=True, pasta_user=self.ps, capabilities=self.desired_capabilities ) self.teacher = Teacher( use_env_vars=True, existing_driver=self.student.driver, pasta_user=self.ps, capabilities=self.desired_capabilities ) self.teacher.login() # Create an external assignment for the student to work self.teacher.select_course(appearance='physics') self.teacher.wait.until( expect.visibility_of_element_located( (By.ID, 'add-assignment') ) ).click() self.teacher.find( By.PARTIAL_LINK_TEXT, 'Add External Assignment').click() assert('externals/new' in self.teacher.current_url()), \ 'Not on the add an external assignment page' self.teacher.find( By.XPATH, "//input[@id = 'reading-title']").send_keys('Epic 48') self.teacher.find( By.XPATH, "//textarea[@class='form-control empty']").send_keys( "instructions go here") self.teacher.find( By.XPATH, "//input[@id = 'hide-periods-radio']").click() # Choose the first date calendar[0], second is calendar[1] # and set the open date to today self.teacher.driver.find_elements_by_xpath( "//div[@class = 'datepicker__input-container']")[0].click() self.teacher.driver.find_element_by_xpath( "//div[@class = 'datepicker__day datepicker__day--today']").click() # Choose the second date calendar[1], first is calendar[0] self.teacher.driver.find_elements_by_xpath( "//div[@class = 'datepicker__input-container']")[1].click() while(self.teacher.find( By.XPATH, "//span[@class = 'datepicker__current-month']" ).text != 'December 2016'): self.teacher.find( By.XPATH, "//a[@class = 'datepicker__navigation datepicker__" + "navigation--next']").click() # Choose the due date of December 31, 2016 weekends = self.teacher.driver.find_elements_by_xpath( "//div[@class = 'datepicker__day datepicker__day--weekend']") for day in weekends: if day.text == '31': due = day due.click() break self.teacher.find(By.XPATH, "//input[@id='external-url']").send_keys( "google.com") self.teacher.sleep(5) # Publish the assignment self.teacher.find( By.XPATH, "//button[@class='async-button -publish btn btn-primary']").click() self.teacher.sleep(60) self.student.login()
from time import sleep from staxing.helper import Teacher basic_test_env = json.dumps([{ 'platform': 'OS X 10.11', 'browserName': 'chrome', 'version': 'latest', 'screenResolution': "1024x768", }]) BROWSERS = json.loads(os.getenv('BROWSERS', basic_test_env)) COURSE = "college_physics" # Log in to tutor teacher = Teacher(use_env_vars=True) teacher.login() teacher.select_course(appearance=COURSE) def delete_assignment(target_element, is_published): """ target_element: the web element of assignment to be deleted """ target_element.click() sleep(1) if is_published: teacher.find(By.ID, "edit-assignment-button").click() sleep(1) delete_button = teacher.wait.until( expect.element_to_be_clickable(
def test_teacher_remove_themself_from_the_course_7725(self): """Remove themself from the course. Steps: Go to Tutor Log in as a teacher Click on a Concept Coach book Click on the user menu Select course roster Click on 'Remove' on the same row as themselves Click on the 'Remove' button Expected Result: Teacher is removed from course and taken back to dashboard """ self.ps.test_updates['name'] = 'cc1.10.012' \ + inspect.currentframe().f_code.co_name[4:] self.ps.test_updates['tags'] = [ 'cc1', 'cc1.10', 'cc1.10.012', '7725' ] self.ps.test_updates['passed'] = False # Test steps and verification assertions self.admin.login() self.admin.driver.get( 'https://tutor-qa.openstax.org/admin/courses/8/edit') self.admin.page.wait_for_page_load() teacher_name = 'Trent' self.admin.driver.find_element( By.XPATH, '//a[contains(text(),"Teachers")]').click() self.admin.driver.find_element( By.ID, 'course_teacher').send_keys(teacher_name) self.admin.wait.until( expect.visibility_of_element_located( (By.XPATH, '//li[contains(text(),"%s")]' % teacher_name) ) ).click() self.admin.sleep(1) self.admin.driver.find_element( By.LINK_TEXT, 'Main Dashboard').click() self.admin.page.wait_for_page_load() self.admin.logout() # redo set-up, but make sure to go to course 8 # login as the teacher just added to the course teacher2 = Teacher( username='******', password=os.getenv('TEACHER_PASSWORD'), existing_driver=self.teacher.driver ) teacher2.login() teacher2.driver.get('https://tutor-qa.openstax.org/courses/8') teacher2.open_user_menu() teacher2.wait.until( expect.element_to_be_clickable( (By.LINK_TEXT, 'Course Settings and Roster') ) ).click() teacher2.page.wait_for_page_load() # delete teacher teachers_list = teacher2.driver.find_elements( By.XPATH, '//div[@class="teachers-table"]//tbody//tr') for x in teachers_list: temp_first = x.find_element( By.XPATH, './td[1]' ).text if temp_first == teacher_name: x.find_element( By.XPATH, './/td//span[contains(text(),"Remove")]' ).click() teacher2.sleep(1) teacher2.driver.find_element( By.XPATH, '//div[@class="popover-content"]//button' ).click() break if x == teachers_list[-1]: print('added teacher was not found, and not deleted') raise Exception # after removing self from course taken to dashboard # or course if only 1 other course assert('/courses/8' not in teacher2.current_url()), \ 'teacher not deleted' teacher2.delete() self.ps.test_updates['passed'] = True