def i_access_the_management_console(step): if world.using_selenium: world.browser.get(django.django_url("/manage/")) else: response = world.client.get(django.django_url("/manage/"),follow=True) world.response = response world.dom = html.fromstring(response.content)
def i_log_out(step): if world.using_selenium: world.firefox.get(django_url("/accounts/logout/")) else: response = world.client.get(django_url("/accounts/logout/"),follow=True) world.response = response world.dom = html.fromstring(response.content)
def i_access_the_counselor_landing_page(step): if world.using_selenium: world.browser.get(django.django_url("/intervention/")) else: response = world.client.get(django.django_url("/intervention/"),follow=True) world.response = response world.dom = html.fromstring(response.content)
def i_am_username_in_course(step, username, coursename): if world.using_selenium: world.browser.get(django.django_url("/accounts/logout/?next=/")) world.browser.get(django.django_url("accounts/login/?next=/")) wait = ui.WebDriverWait(world.browser, 5) wait.until(visibility_of_element_located((By.ID, 'guest-login'))) elt = world.browser.find_element_by_id('guest-login') elt.click() username_field = world.browser.find_element_by_id("id_username") username_field.send_keys(username) password_field = world.browser.find_element_by_id("id_password") password_field.send_keys("test") form = world.browser.find_element_by_name("login_local") form.submit() wait = ui.WebDriverWait(world.browser, 5) wait.until(lambda driver: world.browser.title.find("Home") > -1) wait.until(lambda driver: world.browser.find_element_by_id("loaded")) course_title = world.browser.find_element_by_id("course_title_link") msg = ("Expected the %s class, but found the %s class" % (coursename, course_title.text)) assert course_title.text.find(coursename) > -1, msg assert username in world.browser.page_source, world.browser.page_source else: world.client.login(username=username, password='******')
def i_go_to_the_add_participant_page(step): if world.using_selenium: world.firefox.get(django_url("/manage/add_participant/")) response = world.client.get( django_url("/manage/add_participant/"), follow=True) world.response = response world.dom = html.fromstring(response.content)
def access_url(step, url): if world.skipping: return if world.using_selenium: world.browser.get(django_url(url)) else: response = world.client.get(django_url(url), follow=True) world.dom = html.fromstring(response.content)
def video_upload_is_enabled(step): if world.using_selenium: world.browser.get(django_url("/dashboard/sources/")) try: elt = world.browser.find_element_by_id("mediathread-video-upload") if elt: elt.click() world.browser.get(django_url("/")) except NoSuchElementException: pass # It's already enabled. That's ok.
def i_am_username_in_course(step, username, coursename): if world.using_selenium: world.browser.get(django.django_url("/accounts/logout/?next=/")) world.browser.get(django.django_url("accounts/login/?next=/")) wait = ui.WebDriverWait(world.browser, 5) wait.until(visibility_of_element_located((By.ID, 'guest-login'))) elt = world.browser.find_element_by_id('guest-login') elt.click() username_field = world.browser.find_element_by_id("id_username") username_field.send_keys(username) password_field = world.browser.find_element_by_id("id_password") password_field.send_keys("test") form = world.browser.find_element_by_name("login_local") form.submit() if re.match(r'^instructor', username): try: course = world.browser.find_element_by_css_selector( 'a.choose-course') except NoSuchElementException: wait.until( visibility_of_element_located((By.ID, 'sandboxes_link'))) sandboxes_link = world.browser.find_element_by_id( 'sandboxes_link') sandboxes_link.click() wait = ui.WebDriverWait(world.browser, 5) wait.until( visibility_of_element_located( (By.CSS_SELECTOR, 'a.choose-course'))) course = world.browser.find_element_by_css_selector( 'a.choose-course') course.click() wait = ui.WebDriverWait(world.browser, 5) wait.until(lambda driver: world.browser.title.find("Home") > -1) wait.until(lambda driver: world.browser.find_element_by_id("loaded")) course_title = world.browser.find_element_by_id("course_title_link") msg = ("Expected the %s class, but found the %s class" % (coursename, course_title.text)) assert course_title.text.find(coursename) > -1, msg assert username in world.browser.page_source, world.browser.page_source else: world.client.login(username=username, password='******')
def i_go_to_session(step,activity_number,session_number): i = Intervention.objects.all()[0] s = i.clientsession_set.all()[int(session_number) - 1] assert s.index() == int(session_number) a = s.activity_set.all()[int(activity_number) - 1] assert a.index() == int(activity_number) if world.using_selenium: world.firefox.get(django_url("/activity/%d/" % a.id)) else: response = world.client.get(django_url("/activity/%d/" % a.id)) world.dom = html.fromstring(response.content) world.response = response
def insert_image_in_question(step): if world.skipping: return link = world.browser.find_element_by_link_text("Quiz") link.click() link_manage=world.browser.find_element_by_link_text("manage questions/answers") link_manage.click() world.browser.get(django_url('_quiz/edit_answer/310/')) label = world.browser.find_element_by_id('id_label') label.send_keys('<img id="selenium-img" src="'+django_url("/site_media/img/banner.jpg") + '"/>' ) form = world.browser.find_element_by_css_selector('form') form.submit() world.browser.get(django_url('/module-1/three/evaluation/')) assert(world.browser.find_element_by_id('selenium-img'))
def given_i_am_logged_in_as_an_admin(step): if world.using_selenium: world.browser.get(django.django_url("/accounts/logout/")) world.browser.get(django.django_url("/accounts/login/?next=/intervention/")) username_field = world.browser.find_element_by_id("id_username") password_field = world.browser.find_element_by_id("id_password") form = world.browser.find_element_by_id("login-form") username_field.send_keys("testadmin") password_field.send_keys("test") form.submit() assert world.browser.current_url.endswith("/intervention/"), world.browser.current_url assert "testadmin" in world.browser.page_source, world.browser.page_source else: world.client.login(username='******',password='******')
def setup_env(): setup_test_environment() truncate(User) User.objects.create_user('testuser', email='*****@*****.**', password='******') world.language_code = 'en' world.project_slug = 'a-sample-project' world.browser = Client() world.edit_theme_url = django_url(reverse('project_sheet-instance-edit-related', args=(world.project_slug,))) world.edit_status_url = django_url(reverse('project_sheet-instance-edit-status', args=(world.project_slug,)))
def given_publish_to_world_is_value(step, value): if world.using_selenium: world.browser.get(django.django_url("/dashboard/settings/")) elt = world.browser.find_element_by_id("id_publish_to_world") if value == 'enabled' and elt.get_attribute('checked') is None: elt.click() elif value != 'enabled' and elt.get_attribute('checked') == 'true': elt.click() elt = world.browser.find_element_by_css_selector( 'button[type="submit"]') if elt: elt.click() world.browser.get(django.django_url("/"))
def given_the_selection_visibility_is_value(step, value): if world.using_selenium: world.browser.get(django.django_url("/dashboard/settings/")) if value == "Yes": elt = world.browser.find_element_by_id("selection_visibility_yes") elt.click() else: elt = world.browser.find_element_by_id("selection_visibility_no") elt.click() elt = world.browser.find_element_by_id("selection_visibility_submit") if elt: elt.click() world.browser.get(django.django_url("/"))
def login_as(username): try: user = User.objects.get(username=username) except User.DoesNotExist: user = User.objects.create_user(username, username + "@test.com", "pass") # HACHHACKHACK - Steal the session cookie from the django client to log in from django.test.client import Client cl = Client() cl.login(username=username, password="******") world.browser.get(django_url("/")) # this seems to be required world.browser.add_cookie({"name": "sessionid", "value": cl.cookies["sessionid"].value, "path": "/"}) world.browser.get(django_url("/"))
def given_the_item_visibility_is_value(step, value): if world.using_selenium: world.browser.get(django.django_url("/dashboard/settings/")) elt = world.browser.find_element_by_id("id_see_eachothers_items") if value == 'Yes' and elt.get_attribute('checked') is None: elt.click() elif value != 'Yes' and elt.get_attribute('checked') == 'true': elt.click() elt = world.browser.find_element_by_css_selector( 'button[type="submit"]') if elt: elt.click() world.browser.get(django.django_url("/"))
def navigate_to_an_openended_question_as_staff(step): world.register_by_course_id('MITx/3.091x/2012_Fall', True) world.log_in(email='*****@*****.**', password='******') problem = '/courses/MITx/3.091x/2012_Fall/courseware/Week_10/Polymer_Synthesis/' world.browser.visit(django_url(problem)) tab_css = 'ol#sequence-list > li > a[data-element="5"]' world.css_click(tab_css)
def given_i_fetch_the_urls(step): urls = map(lambda i: django_url(i['url']), step.hashes) for url in urls: http = world.get_url(url) world.statuses.append((url, http.code)) world.content_types.append((url, http.headers['content-type'])) http.close()
def selenium(self, url): # selenium can't/won't set additional http headers # so to do the equivalent here, we would have to # run a proxy server. yuck. # for now, just keep in mind that # selenium won't be accessing the site the same way world.browser.get(django_url(url))
def register(): url = 'courses/{org}/{number}/{name}/about'.format( org='edx', number='999', name='Certificates') world.browser.visit(django_url(url)) world.css_click('section.intro a.register') assert world.is_css_present('section.wrapper h3.title')
def given_i_access_the_group1_page(step, group1): """ access a page by pagename expect 200""" pageurl = reverse(group1) world.full_url = django_url(pageurl) world.response = world.browser.get(pageurl, follow=True) world.dom = html.fromstring(world.response.content) assert_true(world.response.status_code == 200)
def open_story_in_builder_hash_id_step(step, title, wkflw_step): story = Story.objects.get(storytranslation__title=title) path = reverse('story_builder', kwargs={'story_id': story.story_id, 'step': wkflw_step,}) path = path.replace(story.story_id, "#%s" % (story.story_id)) world.browser.visit(django_url(path))
def i_register_to_audit_the_course(_step): url = django_url('courses/%s/about' % world.scenario_dict['COURSE'].id.to_deprecated_string()) world.browser.visit(url) world.css_click('section.intro a.register') audit_button = world.browser.find_by_name("audit_mode") audit_button.click() assert world.is_css_present('section.container.dashboard')
def given_i_fetch_the_urls(step): urls = [django_url(i['url']) for i in step.hashes] for url in urls: http = world.get_url(url) world.statuses.append((url, http.code)) world.content_types.append((url, http.headers.dict['content-type'])) http.close()
def i_go_to_session(step,session_number): i = Intervention.objects.all()[0] s = i.clientsession_set.all()[int(session_number) - 1] assert s.index() == int(session_number) response = world.client.get(django_url("/session/%d/" % s.id)) world.dom = html.fromstring(response.content) world.response = response
def the_participant_has_completed_activity_in_session_1(step,num_activities,session_number): world.participant.participantsession_set.all().delete() world.participant.participantactivity_set.all().delete() i = Intervention.objects.all()[0] s = i.clientsession_set.all()[int(session_number) - 1] for a in s.activity_set.all()[:int(num_activities)]: r = world.client.post(django_url("/activity/%d/complete/" % a.id),{})
def i_click_the_link(step, text): if not world.using_selenium: for a in world.dom.cssselect("a"): if a.text: if text.strip().lower() in a.text.strip().lower(): href = a.attrib['href'] response = world.client.get(django_url(href)) world.dom = html.fromstring(response.content) return assert False, "could not find the '%s' link" % text else: link = None try: link = world.firefox.find_element_by_partial_link_text(text) assert link.is_displayed() link.click() except: try: time.sleep(1) link = world.firefox.find_element_by_partial_link_text(text) assert link.is_displayed() link.click() except: world.firefox.get_screenshot_as_file("/tmp/selenium.png") assert False, link.location
def add_correct_lti_to_course(_step): category = 'lti' world.scenario_dict['LTI'] = world.ItemFactory.create( # parent_location=section_location(course), parent_location=world.scenario_dict['SEQUENTIAL'].location, category=category, display_name='LTI', metadata={ 'lti_id': 'correct_lti_id', 'launch_url': world.lti_server.oauth_settings['lti_base'] + world.lti_server.oauth_settings['lti_endpoint'] } ) course = world.scenario_dict["COURSE"] chapter_name = world.scenario_dict['SECTION'].display_name.replace( " ", "_") section_name = chapter_name path = "/courses/{org}/{num}/{name}/courseware/{chapter}/{section}".format( org=course.org, num=course.number, name=course.display_name.replace(' ', '_'), chapter=chapter_name, section=section_name) url = django_url(path) world.browser.visit(url)
def but_i_see_the_post_in_the_post_manager(step): world.browser.get(django_url("/posts/manage")) for el in csss("a"): if el.text.strip() == "My Title Draft": break else: assert False, "Draft not found in post manager"
def assign_org_to_user(step, username, name): """ Assign user to organization via the User admin """ organization = Organization.objects.get(organizationtranslation__name=name) world.browser.visit(django_url('/admin/auth/user/')) world.browser.click_link_by_text(username) world.browser.select('organizations', organization.pk) world.browser.find_by_name('_save').first.click()
def navigate_to_url(step, url): full_url = django_url(url) world.response = world.browser.get(full_url, follow=True) assert (world.response.status_code == 200)
def i_visit_the_course_info_url(step): url = django_url('/courses/MITx/6.002x/2012_Fall/courseware') world.browser.visit(url)
def validate_page_url(self): assert self.browser.url == django_url(self.url)
def unassign_user_from_group(step, username, group_name): world.browser.visit(django_url('/admin')) world.browser.click_link_by_text("Users") world.browser.click_link_by_text(username) world.browser.select('groups', '1') world.browser.find_by_name('_save').first.click()
def i_am_signed_in_as_unmanaged_blogger(step): access_url(step, "/accounts/login/?next=/") i_login_as(step, "testunmanaged", "testunmanaged") assert world.browser.current_url == django_url("/"), "Login failed."
def visit_url(step, url): world.browser.visit(django_url(url))
def visit_detail_page(step): world.browser.visit( django_url('/organizations/%s' % world.organization.organization_id))
def i_am_logged_in(step): world.create_user('robot', 'test') world.log_in(username='******', password='******') world.browser.visit(django_url('/')) # You should not see the login link assert world.is_css_not_present('a#login')
def validate_back_link(self): self.browser.find_link_by_href(django_url(InvestigatorsListPage.url))
def access_url(step, url): if world.using_selenium: world.firefox.get(django_url(url)) else: response = world.client.get(django_url(url)) world.dom = html.fromstring(response.content)
def url_equals(url): return world.browser.url == django_url(url)
def visit(url): world.browser.visit(django_url(url))
def visit_story_detail(step, title): story = Story.objects.get(storytranslation__title=title) path = reverse('story_detail', kwargs={'slug': story.slug}) world.browser.visit(django_url(path))
def i_register_for_the_course(_step, course): url = django_url('courses/%s/about' % world.scenario_dict['COURSE'].id.to_deprecated_string()) world.browser.visit(url) world.css_click('.intro a.register') assert world.is_css_present('.dashboard')
def i_go_to(step, url): url = django_url(url) world.driver.get(url) world.dom = html.fromstring(world.driver.page_source)
def i_go_to_member_page(step, member_name): member_obj = Member.objects.get(name=member_name) world.browser.visit(django_url('/membro/%i' % member_obj.id))
def not_member(step, username, name): world.browser.visit( django_url('/organizations/%s' % world.organization.organization_id)) world.assert_text_not_in_list('ul.members li', username)
def should_have_link_with_path_and_text(step, path, text): link = world.browser.find_link_by_text(text) assert len(link) > 0 assert_equals(link.first["href"], django_url(path))
def access_url(step, url): world.browser.get(django_url(url))
def i_am_logged_in(step): world.create_user('robot', 'test') world.log_in('robot', 'test') world.browser.visit(django_url('/')) # You should not see the login link assert_equals(world.browser.find_by_css('a#login'), [])
def i_am_redirected_to_login(step): # URL is correct.... time.sleep(1) assert world.browser.current_url.split("?")[0] == django_url("/accounts/login/"), "Expected %s, got %s" % (django_url("/accounts/login/"), world.browser.current_url.split("?")[0]) # ... and login form exists (e.g. page rendered properly) world.browser.find_element_by_class_name('login-form')
def when_i_mistype_a_quiz(step): Quiz.objects.create(key='abcde') world.browser.visit(django_url('/q/abcdE'))
def given_i_navigate_to_group1(step, url): url = django_url(url) assert_equals(url, 'http://127.0.0.1:8000/') raw = urllib.request.urlopen(url).read() world.dom = html.fromstring(raw)
def when_i_am_answering_random_questions(step): world.browser.visit(django_url(''))
def visit_admin_edit_page(step, name): world.browser.visit(django_url('/admin/storybase_user/organization/')) world.browser.click_link_by_text(name)
def go_to_the_url(step, url): world.response = world.browser.visit(django_url(url))
def visit(url): world.browser.visit(django_url(url)) wait_for_js_to_load()
def has_website_url_in_admin(step, name, website_url): # Visit the Organization's admin panel world.browser.visit(django_url('/admin/storybase_user/organization/')) world.browser.click_link_by_text(name) org_website_url = world.browser.find_by_css('#id_website_url').first.value assert_equal(org_website_url, website_url)
def i_am_not_logged_in(step): if world.using_selenium: world.firefox.get(django_url("/accounts/logout/")) else: world.client.logout()
def validate_edit_investigator_url(self): assert self.browser.url == django_url(self.url)