def test_substitute(self): # pragma: no cover selenium = self.selenium product = Product.objects.get(name="My product 1") selenium.get(f"{self.live_server_url}") selenium.maximize_window() selenium.implicitly_wait(5) text = selenium.find_element_by_class_name("main-search") submit = selenium.find_element_by_id("search-button") text.send_keys("product") submit.click() wait = WebDriverWait(selenium, 20) wait.until(EC.url_to_be(f"{self.live_server_url}/product/")) product_1 = selenium.find_element_by_xpath( f"//a[@href='/substitute/{product.id}']") while selenium.current_url == f"{self.live_server_url}/product/": product_1.click() wait = WebDriverWait(selenium, 20) wait.until( EC.url_to_be(f"{self.live_server_url}/substitute/{product.id}")) current_url = selenium.current_url if (selenium.current_url[len(selenium.current_url) - 1]) == "/": current_url = selenium.current_url[:-1] assert current_url == f"{self.live_server_url}/substitute/{str(product.id)}" assert selenium.find_element_by_xpath( "//a[@href='?page=2']") is not None assert "Vous pouvez remplacez cet aliment par :" in selenium.page_source
def buy_ticket(one_train, is_stu, seat_name): action = ActionChains(driver) reserve_button = one_train.find_element_by_xpath("./td[last()]/a") # 预订按钮 action.double_click(reserve_button) # 双击预订按钮 action.perform() login_box_visible = driver.find_element_by_class_name('modal-login').get_attribute('style') if login_box_visible != 'display: none;': # 判断登陆信息是否过期,是否会弹出登陆框 print('登陆信息失效,请重新登陆!') login() WebDriverWait(driver, 10).until( EC.url_to_be('https://kyfw.12306.cn/otn/confirmPassenger/initDc') ) # 是否来到确认订单页面 print("登陆成功!") WebDriverWait(driver, 10).until( EC.url_to_be('https://kyfw.12306.cn/otn/confirmPassenger/initDc') ) # 是否来到确认订单页面 choose_passenger() # 选择乘客 if is_stu == 'T': # 处理是否购买学生票的弹出框 WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, 'dialog_xsertcj_ok')) ) driver.find_element_by_id('dialog_xsertcj_ok').click() else: WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, 'dialog_xsertcj_cancel')) ) driver.find_element_by_id('dialog_xsertcj_cancel').click() choose_seat(seat_name) # 在确认订单处选择座位类型 WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, 'submitOrder_id')) ) driver.find_element_by_id('submitOrder_id').click() # 提交订单 confirm_to_buy()
def fnt_login(iteration=1): for driver in drivers.remoteList: driver.implicitly_wait(20) wait = WebDriverWait(driver, 20) try: for i in range(0, iteration): driver.get(d.url_fntmain) wait.until(EC.url_to_be(d.url_base + d.url_login)) driver.find_element_by_id("username").send_keys(d.username) driver.find_element_by_id("password").send_keys(d.password) driver.find_element_by_id("ok").send_keys(Keys.ENTER) wait.until(EC.url_to_be(d.url_base + d.url_mandant)) driver.find_element_by_id("ok").click() wait.until(EC.url_to_be(d.url_base + d.url_command)) driver.set_page_load_timeout(10) time.sleep(2) driver.find_element_by_xpath("//*[@id='logout']/span").click() except WebDriverException as e: print("Execution error {}".format(e)) return False finally: #for loginHARD #driver.quit() #driver.close() pass return True
def test_valid(self): get_user_model().objects.create_superuser('tester', '', 'test') self.do_login(username='******', password='******') WebDriverWait(self.browser, 30).until( url_to_be("%s/accounts/profile/" % self.live_server_url), 'Should redirect to profile page') edid_detail_url = \ "%s/edid/%i/" % (self.live_server_url, self.edid.id) edid_update_url = \ "%s/edid/%i/update/" % (self.live_server_url, self.edid.id) edid_revision_url = \ "%s/edid/%i/revision/" % (self.live_server_url, self.edid.id) timing_1_update_url = "%s/edid/%i/standard_timing/%i/update/" % ( self.live_server_url, self.edid.id, self.edid.standardtiming_set.all()[0].id) # Go to timing update page self.browser.get(timing_1_update_url) # Update timing and submit form self.browser.find_element_by_id('id_refresh_rate').clear() self.browser.find_element_by_id('id_refresh_rate').send_keys('120') self.browser.find_element_by_id('submit-id-submit').click() WebDriverWait(self.browser, 30).until(url_to_be(edid_update_url), 'Should redirect to EDID update page') # Update EDID and submit form self.browser.find_element_by_link_text('Monitor Range Limits').click() self.browser.find_element_by_id('id_monitor_range_limits').click() self.browser.find_element_by_id('submit-id-submit').click() WebDriverWait(self.browser, 30).until(url_contains(edid_detail_url), 'Should redirect to EDID detail page') # Check 'Monitor Range Limits' is disabled self.assertRaises(NoSuchElementException, self.browser.find_element_by_id, 'monitor_range_limits') # Go to EDID revisions page self.browser.get(edid_revision_url) # Revert revision 1 self.browser.find_element_by_id('revision-1-revert-link').click() # Confirm revert action self.browser.find_element_by_id('revert-id-revert').submit() WebDriverWait(self.browser, 30).until(url_contains(edid_detail_url), 'Should redirect to EDID detail page') # Check 'Monitor Range Limits' is enabled self.browser.find_element_by_id('monitor_range_limits')
def __call__(self, driver: WebDriver): try: res = EC.url_to_be(self.url)(driver) if res: return res except Exception as e: print(e) pass return EC.url_to_be(f'{self.url}/')(driver)
def click_login(self): self.driver.find_element_by_xpath(self.login_button_xpath).click() commonobj = CommonFunctions() url = commonobj.get_value_from_conf_file('configuration.properties', 'URL') try: EC.url_to_be('url') except TimeoutException: print("Home page is taking tool long to load completely")
def test_login_with_correct(self): # create a user in order to be able to login self.signup() self.wait.until(ec.url_to_be(DOMAIN + "/me")) # login with correct credentials self.go_to_page() self.login.login() self.wait.until(ec.url_to_be(DOMAIN + "/me")) # clean up after successfully login self.delete_account()
def test_add_then_delete_a_product_from_shopping_cart(self): """US008-AT01: add then drop a product from shopping cart.""" # request the catalog page start_url = self.home_url + "catalog/" self.driver.get(start_url) # click on the first button "Ajouter au panier" add_to_cart_button = self.driver.find_elements_by_link_text( "Ajouter au panier")[0] add_to_cart_button.click() # wait for page loading WebDriverWait(self.driver, timeout=10).until(EC.url_changes(start_url)) # check wether the page is reachable expected_url_start = self.home_url + "shopping_cart/add_product/" self.assertTrue(self.driver.current_url.startswith(expected_url_start)) # update data last_name_field = self.driver.find_element_by_id("id_size") last_name_field.send_keys("M") # click on the button "Ajouter au panier" submit_button = self.driver.find_element_by_id("submit-id-submit") submit_button.click() # wait for page loading WebDriverWait(self.driver, timeout=10).until(EC.url_to_be(start_url)) # click on the link "Voir mon panier" cart_link = self.driver.find_element_by_link_text("Voir mon panier") cart_link.click() # wait for page loading WebDriverWait(self.driver, timeout=10).until(EC.url_changes(start_url)) # check wether the page is reachable expected_url = self.home_url + "shopping_cart/" self.assertEqual(self.driver.current_url, expected_url) # click on the button "Supprimer" delete_button = self.driver.find_element_by_link_text("Supprimer") delete_button.click() # wait for page loading WebDriverWait(self.driver, timeout=10).until(EC.url_changes(expected_url)) # check wether the page is reachable new_url_start = self.home_url + "shopping_cart/drop_product/" self.assertTrue(self.driver.current_url.startswith(new_url_start)) # click on the button "Confirmer" submit_button = self.driver.find_element_by_id("submit-id-submit") submit_button.click() # wait for page loading expected_url = self.home_url + "shopping_cart/" WebDriverWait(self.driver, timeout=10).until(EC.url_to_be(expected_url)) # check wether the cart is empty p_list = self.driver.find_elements_by_tag_name('p') self.assertEqual(p_list[0].text, "Montant total du panier : 0 €") self.assertEqual(p_list[1].text, "Votre panier de pré-commande est vide !")
def test_login_password_auth(self): self.driver.get("https://passport.yandex.ru/auth") self.assertIn("Авторизация", self.driver.title) elem = self.driver.find_element_by_css_selector( "input#passp-field-login") elem.send_keys(_AUTH_LOGIN) elem.send_keys(Keys.RETURN) WebDriverWait(self.driver, 10).until( EC.url_to_be("https://passport.yandex.ru/auth/welcome")) elem = self.driver.find_element_by_css_selector( "input#passp-field-passwd") elem.send_keys(_AUTH_PASSWORD) elem.send_keys(Keys.RETURN) WebDriverWait(self.driver, 10).until( EC.url_to_be("https://passport.yandex.ru/profile"))
def test_one_click_buy_order_email(self): product_vendor_code = self.product.vendor_code increase_quantity = self.browser.find_element_by_xpath( '//*[@class="product-price-wrapper"]/div[1]/div[1]/span[3]/button[1]' ) increase_quantity.click() increase_quantity.click() result_quantity = int( self.browser.find_element_by_class_name( 'js-touchspin').get_attribute('value')) self.browser.execute_script('$("#input-one-click-phone").val("");') phone_field = self.browser.find_element_by_id('input-one-click-phone') phone_field.send_keys('2222222222') self.one_click.click() self.wait.until(EC.url_to_be(self.success_order)) sent_mail_body = mail.outbox[0].body self.assertIn('+7 (222) 222 22 22', sent_mail_body) self.assertInHTML( '<td align="left"' 'style="border-bottom:1px solid #E4E4E4;padding:10px">{0}</td>'. format(product_vendor_code), sent_mail_body) self.assertIn(self.product.url, sent_mail_body) self.assertIn('{0} шт.'.format(result_quantity), sent_mail_body) self.assertInHTML( '<td align="right" style="padding:5px 10px">{0} руб.</td>'.format( int(self.product.price * result_quantity)), sent_mail_body)
def _login(self): self.driver.get(self.login_url) self.driver.find_element_by_link_text(r'账号登录').click() #显式等待,判断是否登录成功(EC.url_to_be(目标url):判断当前url是否等于目标url,是就不继续等待下去了,退出) WebDriverWait(self.driver, 1000).until(EC.url_to_be(self.personal_centre_url)) print('登录成功')
def test(browser, request, task_url): page = Task302Page(browser, task_url) assert page.heading.tag_name == "h1" assert page.heading.text == "Задание 3.02" assert page.a.tag_name == "input" assert page.b.tag_name == "input" assert page.submit.tag_name == "button" with pytest.raises(NoSuchElementException): assert page.result a = randint(10, 99) b = randint(10, 99) page.a.clear() page.a.send_keys(str(a)) page.b.clear() page.b.send_keys(str(b)) page.submit.click() WebDriverWait(page.browser, timeout=4).until( EC.url_to_be(task_url), f"no page reload", ) assert page.result.tag_name == "span" assert page.result.text == f"{a} плюс {b} равно {a + b}"
def test_delete_user(self): self.selenium.get(f"{self.live_server_url}/mijn/privacy") WebDriverWait(self.selenium, self.explicit_wait).until( EC.text_to_be_present_in_element( (By.CSS_SELECTOR, ".header-title"), "Mijn privacy"), EC.text_to_be_present_in_element( (By.CSS_SELECTOR, ".privacy__form__label"), "Communities"), ) self.selenium.find_element_by_css_selector( ".privacy input").is_selected() self.selenium.find_element_by_css_selector( ".permission-container .switch-input").click() WebDriverWait(self.selenium, self.explicit_wait).until( EC.text_to_be_present_in_element( (By.CSS_SELECTOR, ".privacy__form__button"), "Verwijder account en log uit")) self.selenium.find_element_by_css_selector( ".privacy__form__button").click() WebDriverWait(self.selenium, self.explicit_wait).until( EC.text_to_be_present_in_element( (By.CSS_SELECTOR, ".popup__title"), "Account verwijderen")) self.selenium.find_element_by_css_selector( ".popup-content__actions button").click() WebDriverWait(self.selenium, self.explicit_wait).until( EC.url_to_be("https://engine.surfconext.nl/logout"))
def scratch(save_dir: str, driver: WebDriver, wait: WebDriverWait): """ スクラッチ """ url = 'https://aw.mobadme.jp/scratch/play?m_id=5701' success = True driver.get(url) try: wait.until(ec.url_to_be(url)) # img.item-image を3つ選択して待機 seals = driver.find_elements_by_css_selector('img.item-image')[0:3] for s in seals: s.click() # .resultBoard が出たらキャプチャ wait.until(ec.visibility_of_element_located( (By.CSS_SELECTOR, '.resultBoard'))) driver.save_screenshot( '%s/scratch_%s.png' % (save_dir, datetime.datetime.now().strftime('%Y%m%d%H%M%S'))) except: utils.LOGGER.exception('スクラッチプレイエラー') success = False # ステータス更新 RESULTS.scratch = { 'success': success, }
def test_guetstboard_submit_04(self): """Posting submit success and view registerd message""" self.selenium.get('%s%s' % (self.live_server_url, '/guestboard/')) # input name name = self.selenium.find_element_by_css_selector('input[name="name"]') name.send_keys("Arty") # input message message = self.selenium.find_element_by_css_selector( 'textarea[name="message"]') message.send_keys("Test Message 100") # click submit button submit = self.selenium.find_element_by_css_selector( 'input[type="submit"]') submit.click() # time.sleep(self.SERVER_RESPONSE_WAIT_SEC) # リダイレクトチェック wait = WebDriverWait(self.selenium, self.SERVER_RESPONSE_WAIT_SEC) wait.until( EC.url_to_be('%s%s' % (self.live_server_url, '/guestboard/'))) # 投稿成功メッセージチェック messages = self.selenium.find_elements_by_css_selector( 'ul.messages > li.success') self.assertEqual(1, len(messages)) self.assertEqual('投稿を受け付けました。', messages[0].text.strip()) # 投稿パネルの表示内容チェック postings = self.selenium.find_elements_by_css_selector('div.panel') self.assertEqual(5, len(postings)) posting_data = { "name": "Arty", "message": "Test Message 100", } self.__assert_posting_panel(postings[0], posting_data)
def test_login_with_correct_login_password(driver): driver.get("http://localhost/litecart/admin/login.php") driver.find_element_by_name("username").send_keys("admin") driver.find_element_by_name("password").send_keys("admin") driver.find_element_by_name("login").click() WebDriverWait(driver, 10).until(EC.url_to_be("http://localhost/litecart/admin/"))
def verify_result( page: Task310Page, task_url: str, money: str, result1: str = "", result2: str = "", ) -> None: page.money.clear() if money: page.money.send_keys(money) page.submit.click() WebDriverWait(page.browser, timeout=4).until( EC.url_to_be(task_url), f"no page reload", ) if not money: with pytest.raises(NoSuchElementException): assert page.result1.tag_name with pytest.raises(NoSuchElementException): assert page.result2.tag_name return assert page.result1.tag_name == "span" assert page.result1.text == result1, f"result1 mismatch for: {money!r}" assert page.result2.tag_name == "pre" assert page.result2.text == result2, f"result2 mismatch for: {money!r}"
def wait_until_url(self, url, time_to_wait=10, frequency=0.5): """ Method to wait until the url is loaded and by default it waits for 10 seconds and polls for 0.5 milli seconds Usage : obj = Base() obj.wait_until_url(url = "https://www.google.com") :param url: url to be loaded :param time_to_wait : :param frequency : :return: (True, loaded url)/False (if url failed to load) """ start_time = int(round(time.time()) / 1000) try: wait = WebDriverWait(self.browser, time_to_wait, poll_frequency=frequency) url_to_load = wait.until(EC.url_to_be(url)) end_time = int(round(time.time()) / 1000) load_time = (end_time - start_time) / 1000 log.info("url loaded in {} seconds".format(load_time)) except Exception as e: end_time = int(round(time.time()) / 1000) load_time = (end_time - start_time) / 1000 self.get_screenshot(info="Error") log.error( "url loading failed with exception {} and the url load time is {} seconds" .format(e, load_time)) traceback.print_exc() return False return True, url_to_load
def _login(self): self.driver.get(self.login_url) WebDriverWait(self.driver, 1000).until(EC.url_to_be(self.init_url)) print("登录成功...") self._order_ticket()
def Login(self, username, password, driver): try: logged_in = False driver.get('https://accounts.spotify.com/en/login/') element_present = EC.presence_of_element_located( (By.ID, 'login-username')) WebDriverWait(driver, self.website_load_max_wait).until(element_present) username_elem = driver.find_element_by_id('login-username') username_elem.send_keys(username) password_elem = driver.find_element_by_id('login-password') password_elem.send_keys(password) login_button_elem = driver.find_element_by_id('login-button') login_button_elem.click() try: element_present = EC.url_to_be( 'https://accounts.spotify.com/en/status') WebDriverWait(driver, self.login_check_max_wait).until(element_present) self.PrintText(Fore.CYAN, Fore.RED, 'LOGIN', f'LOGGED IN WITH | {username}:{password}') logged_in = True except TimeoutException: self.PrintText( Fore.RED, Fore.CYAN, 'LOGIN', f'FAILED TO LOGIN WITH | {username}:{password}') logged_in = False return logged_in except: driver.quit() self.Login(username, password, driver)
def repeat_click_if_timeout(driver, webel, ec_url_type, exact_url=None, current_url=None, repeat_click = 1, two_second_wait = False): attempt = 0 url_diff = False while not url_diff: if attempt == repeat_click: raise TimeoutException('{} attempts reached'.format(repeat_click)) print('web element clicked (repeat).') webel.click() if two_second_wait: #for too many APM time.sleep(2) try: if ec_url_type == 'exact': WebDriverWait(driver, 10).until(EC.url_to_be(exact_url)) elif ec_url_type == 'changed': WebDriverWait(driver, 10).until(EC.url_changes(current_url)) url_diff = True except TimeoutException: attempt += 1 print("Navigation failed. Try again. Attempt: {}".format(attempt)) print(current_url)
def go_to_datesearch(driver, mouse, cfg, logger=None): """ メニュー画面から「随時予約・抽選申込」を選択し、「空き状況を検索」画面移動する """ global http_req_num # 待機時間を設定する wait = WebDriverWait(driver, 10) # mypageのURLにリダイレクトされるまで待機する wait.until(EC.url_to_be(cfg['mypage_url'])) # 検索ページがすべて表示されるまで待機する wait.until(EC.presence_of_all_elements_located) # デバック用 # _html = driver.page_source # with open('mypage.html', mode='w', encoding='utf-8', errors='ignore') as f: # f.write(_html) # メニューバーの「随時予約・抽選申込」をクリックする driver.find_element( By.XPATH, '/html/body/div[1]/article/section[2]/ul/li[1]/form/a').click() http_req_num += 1 # 検索ページがDOM上にすべて表示されるまで待機する #wait.until(EC.presence_of_all_elements_located) wait.until(EC.title_contains("空き状況を検索|八王子市施設予約システム")) # 画面のtitleを確認する assert '空き状況を検索|八王子市施設予約システム' in driver.title return driver, mouse
def assert_login_finished_fn(): logger.info( f"{self.name} 请等待网页切换为目标网页,则说明已经登录完成了,最大等待时长为{self.cfg.login.login_finished_timeout}" ) WebDriverWait(self.driver, self.cfg.login.login_finished_timeout).until( expected_conditions.url_to_be(s_url))
def setUp(self): # create an account in order to be able to login self.signup() self.wait.until(ec.url_to_be(DOMAIN + "/me")) self.page_url = DOMAIN + "/reviews" # create a review self.create_review()
def schoolsByAuthorize(browser): browser.get(<CONFIDENTIAL INFO>) while True: try: WebDriverWait(browser, 30).until(EC.presence_of_element_located(( By.XPATH, '//a[@href="<CONFIDENTIAL INFO>"]' ))) break except TimeoutException: browser.refresh() pass logged = False try: logInButton = browser.find_element_by_id('sch_login_lnk') except NoSuchElementException: logged = True if not logged: logInButton.click() username = browser.find_element_by_xpath("//input[@name='username']") password = browser.find_element_by_xpath("//input[@name='password']") username.send_keys(<CONFIDENTIAL INFO>) password.send_keys(<CONFIDENTIAL INFO>) username.submit() WebDriverWait(browser, 30).until(EC.url_to_be( '<CONFIDENTIAL INFO>/journals' ))
def _login(self): self.driver.get(self.login_url) #显示等待 WebDriverWait(self.driver,1000).until( EC.url_to_be(self.initmy_url) #这个方法表示 url是否是等于指定的url ) print("登陆成功")
def _login(self): self.driver.get(self.login_url) # 检测是否登录 WebDriverWait(self.driver, 1000).until( # 是否等于我的登录地址 EC.url_to_be(self.initmy_url)) print("登录成功!")
def _login(self): self.driver.get(self.login_url) #显示等待 #隐式等待 WebDriverWait(self.driver, 1000).until(EC.url_to_be(self.initmy_url)) print("登陆成功")
def try_to_login(self, username: str, password: str, location_index: int = 1): """ Login to the repairQ page Args: user: RepairQ user's login password: RepairQ user's password group_index: Index of the group to login Returns: True if login is successfull and False otherwise """ LoginPage.set_username(self, username) LoginPage.set_password(self, password) LoginPage.select_location_by_index(self, location_index) btn = self.driver.find_element(*LoginPage.LOGIN_BTN) btn.click() try: self.wait.until(EC.url_to_be('https://cinq.repairq.io/')) except TimeoutException: error = self.driver.find_element_by_class_name('help-inline') # print('RepairQ Login Error:', error.get_attribute("innerHTML") ) return False else: # print('RepairQ Login Success') return True
def testSignup(self): urls = self.urls user = self.newUser self.browser.get(urls['base'] + urls['signup']) #create user email = self.browser.find_element_by_name('email') email.send_keys(user['email']) name = self.browser.find_element_by_name('name') name.send_keys(user['name']) password = self.browser.find_element_by_name('pass') password.send_keys(user['password']) confPass = self.browser.find_element_by_name('confPass') confPass.send_keys(user['password']) confPass.submit() WebDriverWait(self.browser, 10).until( EC.url_to_be(urls['base'] + urls['home']) ) # delete user access_token = self.getTokenFromCookie() user_id = self.browser.get_cookie('user_id')['value'] headers = { 'Authorization': 'Bearer ' + str(access_token) } response = requests.delete(urls['server'] + 'users/' + user_id, headers=headers) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
def test_admin_login(self): """Test client-side actions on login/logout.""" get_user_model().objects.create_superuser('tester', '', 'test') self.do_login(username='******', password='******') WebDriverWait(self.browser, 30).until( url_to_be("%s/accounts/profile/" % self.live_server_url), 'Should redirect to profile page' )
def test_logout(self): # Non-admin user login get_user_model().objects.create_user('tester', '', 'test') self.do_login(username='******', password='******') WebDriverWait(self.browser, 30).until( url_to_be("%s/accounts/profile/" % self.live_server_url), 'Should redirect to profile page' ) # Logout self.do_logout() WebDriverWait(self.browser, 30).until( url_to_be("%s/" % self.live_server_url), 'Should redirect to main page' ) # Check user is really logged out by looking for login link self.browser.find_element_by_id('account_menu').click() self.browser.find_element_by_id('login_link')
def test_valid(self): get_user_model().objects.create_superuser('tester', '', 'test') self.do_login(username='******', password='******') WebDriverWait(self.browser, 30).until( url_to_be("%s/accounts/profile/" % self.live_server_url), 'Should redirect to profile page' ) edid_detail_url = \ "%s/edid/%i/" % (self.live_server_url, self.edid.id) edid_update_url = \ "%s/edid/%i/update/" % (self.live_server_url, self.edid.id) edid_revision_url = \ "%s/edid/%i/revision/" % (self.live_server_url, self.edid.id) timing_1_update_url = "%s/edid/%i/standard_timing/%i/update/" % ( self.live_server_url, self.edid.id, self.edid.standardtiming_set.all()[0].id ) # Go to timing update page self.browser.get(timing_1_update_url) # Update timing and submit form self.browser.find_element_by_id('id_refresh_rate').clear() self.browser.find_element_by_id('id_refresh_rate').send_keys('120') self.browser.find_element_by_id('submit-id-submit').click() WebDriverWait(self.browser, 30).until( url_to_be(edid_update_url), 'Should redirect to EDID update page' ) # Update EDID and submit form self.browser.find_element_by_link_text('Monitor Range Limits').click() self.browser.find_element_by_id('id_monitor_range_limits').click() self.browser.find_element_by_id('submit-id-submit').click() WebDriverWait(self.browser, 30).until( url_contains(edid_detail_url), 'Should redirect to EDID detail page' ) # Check 'Monitor Range Limits' is disabled self.assertRaises( NoSuchElementException, self.browser.find_element_by_id, 'monitor_range_limits' ) # Go to EDID revisions page self.browser.get(edid_revision_url) # Revert revision 1 self.browser.find_element_by_id('revision-1-revert-link').click() # Confirm revert action self.browser.find_element_by_id('revert-id-revert').submit() WebDriverWait(self.browser, 30).until( url_contains(edid_detail_url), 'Should redirect to EDID detail page' ) # Check 'Monitor Range Limits' is enabled self.browser.find_element_by_id('monitor_range_limits')