def login(browser: webdriver.WebDriver): browser.set_page_load_timeout(5) try: browser.get(wbm_cfg.homepage_url) except WebDriverException: browser.refresh() finally: pyautogui.typewrite(wbm_cfg.login_user_value) pyautogui.typewrite("\t") pyautogui.typewrite(wbm_cfg.login_pw_value) pyautogui.typewrite("\n") logging.info("Login executed") wait_for_page(browser, wbm_cfg.homepage_url, wbm_cfg.main_page_attr_xpath)
def test_Selenium_Unit_Test(self): # chrome_driver_path = "/var/lib/jenkins/workspace/rasa pipeline/Selenium_Webdriver/chromedriver" # create a new Chrome session # from pyvirtualdisplay import Display # display = Display(visible=0, size=(800, 600)) # display.start() # options = webdriver.FirefoxOptions() # options.add_argument('-headless') # Last I checked this was necessary. # driver = webdriver.Chrome(chrome_driver_path, options=options1) from selenium.webdriver.firefox.options import Options as FirefoxOptions from selenium.webdriver.firefox.webdriver import WebDriver options1 = FirefoxOptions() options1.add_argument("-headless") driver = WebDriver(options=options1) driver.implicitly_wait(30) time.sleep(12) driver.get( 'http://sidwebpage.s3.us-east-2.amazonaws.com/website/index.html') print(driver.current_url) time.sleep(5) driver.refresh() time.sleep(5) # chatbot testing simulation driver.find_element_by_xpath('//*[@id="webchat"]/div/button ').click() time.sleep(5) Mousepointer = driver.find_element_by_xpath( '//*[@id="webchat"]/div/div/form/input') Mousepointer.send_keys("Hi") Mousepointer.send_keys(Keys.ENTER) ExpectedReply = "Hey! How are you Muthu?" Reply = driver.find_element_by_xpath( '//*[@id="messages"]/div/following::span').text print(Reply) self.assertEqual(Reply, ExpectedReply) print("Success") driver.quit()
def cleanup_cart(browser: webdriver.WebDriver, task_data: TaskData): open_cart_page(browser) product_row_xpath = "//div[contains(@class, 'newcart_box')]" \ "//div[contains(@class, 'newcart_main')]" \ "//ul[contains(@class, 'newcart_list_items')]" product_link_xpath = ".//li[contains(@class, 'newcart_product')]//a[contains(@class, 'title')]" products_in_cart = list( map(lambda p: p.find_element_by_xpath(product_link_xpath).text, browser.find_elements_by_xpath(product_row_xpath))) logging.info( "Finding products added from the task in the list of products in cart") while task_data.products and set( task_data.products).intersection(products_in_cart): logging.info( "List of added products and list of products in cart intersect.") for product in task_data.products: logging.info(f"Working with product {product}.") try: _remove_one_product_from_cart(browser, task_data, product_row_xpath, product) logging.info(f"Done with product {product}. Moving on...") break except NoSuchElementException: logging.error( f"Product {product} was not found in cart and was probably already deleted. Moving on..." ) logging.error(traceback.format_exc()) task_data.products.remove(product) break browser.refresh() products_in_cart = list( map(lambda p: p.find_element_by_xpath(product_link_xpath).text, browser.find_elements_by_xpath(product_row_xpath)))
def fetch_dogs_list(driver: WebDriverClass) -> list: """Fetch list of available rescue dogs. Refreshes the webdriver instance and parses the pages for available rescue dogs. For now, it's implemented by first matching a <div> of class "dogs col-md-12" (hope it doesn't change) and then matching all the children span elements. Parameters ---------- driver : WebDriverClass selenium webdriver instance (already initialized) Returns ------- list List of elements matching the spans containing dogs """ driver.refresh() time.sleep(2) dog_list = driver.find_elements_by_xpath( "//div[@class='dogs col-md-12']/span") dog_list = [dog.text for dog in dog_list] return dog_list
class TransactionTypeAddTest(StaticLiveServerTestCase): def setUp(self): self.selenium = WebDriver() self.user = User.objects.create_superuser(username="******", email="*****@*****.**", password="******", first_name="kossar", last_name="najafi", phone_number="09147898557", account_number="1234567812345678", notification_preference="S") self.selenium.implicitly_wait(10) self.selenium.get('%s%s' % (self.live_server_url, '/admin_panel/transaction_types/add')) def tearDown(self): self.selenium.quit() def __get_page(self): class TransactionTypeAddPage(object): def __init__(self, selenium): self.selenium = selenium self.name = self.selenium.find_element_by_id('id_name') self.description = self.selenium.find_element_by_id('id_description') self.fixed_price = self.selenium.find_element_by_id('id_fixed_price') self.currency_select = Select(self.selenium.find_element_by_id('id_currency')) self.price = self.selenium.find_element_by_id('id_price') self.min_price = self.selenium.find_element_by_id('id_min_amount') self.max_price = self.selenium.find_element_by_id('id_max_amount') self.wage = self.selenium.find_element_by_id('id_wage_percentage') # self.group = self.selenium.find_element_by_id('id_transaction_group') self.general_info = self.selenium.find_element_by_id('id_required_fields_0') self.personal_info = self.selenium.find_element_by_id('id_required_fields_1') self.exam_info = self.selenium.find_element_by_id('id_required_fields_2') self.university_info = self.selenium.find_element_by_id('id_required_fields_3') self.button = self.selenium.find_element_by_xpath("//button[@type='submit']") return TransactionTypeAddPage(self.selenium) def login(self): user = User.objects.get(username="******") SessionStore = import_module(settings.SESSION_ENGINE).SessionStore session = SessionStore() session[SESSION_KEY] = User.objects.get(username="******").id session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0] session[HASH_SESSION_KEY] = user.get_session_auth_hash() session.save() cookie = { 'name': settings.SESSION_COOKIE_NAME, 'value': session.session_key, 'path': '/', } self.selenium.add_cookie(cookie) self.selenium.refresh() self.selenium.get('%s%s' % (self.live_server_url, '/admin_panel/transaction_types/add')) @staticmethod def __get_text(element): return element.get_attribute('textContent') @staticmethod def __get_checked(element): return element.get_attribute('checked') @staticmethod def __send_keys_scrolling(input_element, keys): _ = input_element.location_once_scrolled_into_view time.sleep(1) input_element.send_keys(keys) def check_transaction_type_creation(self): toefl = PaymentType.objects.get(name="toefl") self.assertIn("english", toefl.description) def _fill(self, page): self.__send_keys_scrolling(page.name, 'toefl') self.__send_keys_scrolling(page.description, 'english exam') page.fixed_price.click() page.currency_select.select_by_visible_text("$") page.min_price.clear() page.price.clear() page.max_price.clear() page.wage.clear() self.__send_keys_scrolling(page.price, '200') self.__send_keys_scrolling(page.min_price, '1') self.__send_keys_scrolling(page.max_price, '1000000') self.__send_keys_scrolling(page.wage, '7') page.personal_info.click() page.general_info.click() page.exam_info.click() def test_successful_ttadd(self): self.login() page = self.__get_page() self._fill(page) page.button.click() self.check_transaction_type_creation() self.assertNotIn("add", self.selenium.current_url) def test_empty_parts_add(self): self.login() page = self.__get_page() self._fill(page) page.name.clear() page.button.click() self.assertIn("add", self.selenium.current_url)
class ExchangeCreditTest(StaticLiveServerTestCase): def setUp(self): self.selenium = WebDriver() self.user = User.objects.create_user(username="******", email="*****@*****.**", password="******", first_name="kossar", last_name="najafi", phone_number="09147898557", account_number="1234432112344321", notification_preference="S") self.selenium.implicitly_wait(10) self.selenium.get('%s%s' % (self.live_server_url, '/user_panel/exchange/')) def tearDown(self): self.selenium.quit() def __get_page_1(self): class ExchangePage(object): def __init__(self, selenium): self.selenium = selenium self.from_curr = Select( self.selenium.find_element_by_id('id_currency')) self.to_curr = Select( self.selenium.find_element_by_id('id_final_currency')) self.amount = self.selenium.find_element_by_id( 'id_final_amount') self.button = self.selenium.find_element_by_xpath( "//button[@type='submit']") return ExchangePage(self.selenium) def __get_page_2(self): class ExchangePreviewPage(object): def __init__(self, selenium): self.selenium = selenium self.confirm_exchange = self.selenium.find_element_by_xpath( "//button[@type='submit']") return ExchangePreviewPage(self.selenium) @staticmethod def _fill_1(page): page.amount.send_keys('1') page.from_curr.select_by_visible_text('﷼') page.to_curr.select_by_visible_text('$') def login(self): user = User.objects.get(username="******") SessionStore = import_module(settings.SESSION_ENGINE).SessionStore session = SessionStore() session[SESSION_KEY] = User.objects.get(username="******").id session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0] session[HASH_SESSION_KEY] = user.get_session_auth_hash() session.save() cookie = { 'name': settings.SESSION_COOKIE_NAME, 'value': session.session_key, 'path': '/', } self.selenium.add_cookie(cookie) self.selenium.refresh() self.selenium.get('%s%s' % (self.live_server_url, '/user_panel/exchange/')) @staticmethod def __get_text(element): return element.get_attribute('textContent') def charge_wallet(self, amount): self.selenium.get('%s%s' % (self.live_server_url, '/user_panel/charge/')) self.selenium.find_element_by_id('id_amount').send_keys(amount) self.selenium.find_element_by_id('charge-button').click() self.selenium.get('%s%s' % (self.live_server_url, '/user_panel/exchange/')) def test_preview_exchange_not_empty(self): self.login() page = self.__get_page_1() self._fill_1(page) page.amount.clear() page.button.click() success_set = self.selenium.find_elements_by_xpath( '//*[@id="right-panel"]/div[2]/div/div[1]/div/div') self.assertEqual(len(success_set), 0) page.amount.send_keys('1') page.from_curr.select_by_visible_text('---------') page.button.click() success_set = self.selenium.find_elements_by_xpath( '//*[@id="right-panel"]/div[2]/div/div[1]/div/div') self.assertEqual(len(success_set), 0) page.from_curr.select_by_visible_text('﷼') page.to_curr.select_by_visible_text('---------') page.button.click() success_set = self.selenium.find_elements_by_xpath( '//*[@id="right-panel"]/div[2]/div/div[1]/div/div') self.assertEqual(len(success_set), 0) page.to_curr.select_by_visible_text('$') def test_preview_exchange(self): self.login() self.charge_wallet(550000) page = self.__get_page_1() self._fill_1(page) page.button.click() self.selenium.implicitly_wait(10) self.assertIn("accept", self.selenium.current_url) def test_preview_accept(self): self.login() self.charge_wallet(550000) page = self.__get_page_1() self._fill_1(page) page.button.click() self.selenium.implicitly_wait(10) page2 = self.__get_page_2() page2.confirm_exchange.click() time.sleep(3) credit = self.selenium.find_element_by_id("wallet_balance_$") self.assertEqual(float(1), float(self.__get_text(credit))) self.assertNotIn("accept", self.selenium.current_url)
class ReportTest(StaticLiveServerTestCase): def setUp(self): self.selenium = WebDriver() self.user = User.objects.create_superuser( username="******", email="*****@*****.**", password="******", first_name="kossar", last_name="najafi", phone_number="09147898557", account_number="1234567812345678", notification_preference="S") self.user = User.objects.create_user(username="******", email="*****@*****.**", password="******", first_name="kossar", last_name="najafi", phone_number="09147898557", account_number="1234432112344321", notification_preference="S") self.__create_transactions() self.selenium.implicitly_wait(10) self.selenium.get( '%s%s' % (self.live_server_url, '/admin_panel/transactions/1')) def tearDown(self): self.selenium.quit() @staticmethod def __create_transactions(): user_k = User.objects.get(username="******") transaction1 = Transaction(owner=user_k, amount="300", currency="D") transaction1.save() def login(self): user = User.objects.get(username="******") SessionStore = import_module(settings.SESSION_ENGINE).SessionStore session = SessionStore() session[SESSION_KEY] = User.objects.get(username="******").id session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0] session[HASH_SESSION_KEY] = user.get_session_auth_hash() session.save() cookie = { 'name': settings.SESSION_COOKIE_NAME, 'value': session.session_key, 'path': '/', } self.selenium.add_cookie(cookie) self.selenium.refresh() self.selenium.get( '%s%s' % (self.live_server_url, '/admin_panel/transactions/1')) def __get_page(self): class ReportPage(object): def __init__(self, selenium): self.selenium = selenium self.comment = self.selenium.find_element_by_id('id_comment') self.selenium.execute_script( "window.scrollTo(0, document.body.scrollHeight);") self.button = self.selenium.find_element_by_xpath( "//button[@type='submit']") return ReportPage(self.selenium) @staticmethod def __send_keys_scrolling(input_element, keys): _ = input_element.location_once_scrolled_into_view time.sleep(1) input_element.send_keys(keys) def _fill(self, page): self.__send_keys_scrolling(page.comment, 'suspicious') def test_successful_report(self): self.login() page = self.__get_page() self._fill(page) page.button.click() self.selenium.get( '%s%s' % (self.live_server_url, '/admin_panel/transactions/1')) p = self.selenium.find_elements_by_tag_name('p') self.assertEqual(len(p), 0) @staticmethod def __get_text(element): return element.get_attribute('textContent')
class EditTest(StaticLiveServerTestCase): fixtures = ['user_panel_data.json'] def setUp(self): self.selenium = WebDriver() self.user = User.objects.create_user(username="******", email="*****@*****.**", password="******", first_name="kossar", last_name="najafi", phone_number="09147898557", account_number="1234432112344321", notification_preference="S") self.selenium.implicitly_wait(10) self.selenium.get('%s%s' % (self.live_server_url, '/user_panel/profile/')) def tearDown(self): self.selenium.quit() def login(self): user = User.objects.get(username="******") SessionStore = import_module(settings.SESSION_ENGINE).SessionStore session = SessionStore() session[SESSION_KEY] = User.objects.get(username="******").id session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0] session[HASH_SESSION_KEY] = user.get_session_auth_hash() session.save() cookie = { 'name': settings.SESSION_COOKIE_NAME, 'value': session.session_key, 'path': '/', } self.selenium.add_cookie(cookie) self.selenium.refresh() self.selenium.get('%s%s' % (self.live_server_url, '/user_panel/profile/')) def __get_page(self): class EditPage(object): def __init__(self, selenium): self.selenium = selenium self.username = self.selenium.find_element_by_id('id_username') self.email = self.selenium.find_element_by_id('id_email') self.fname = self.selenium.find_element_by_id('id_first_name') self.lname = self.selenium.find_element_by_id('id_last_name') self.phone = self.selenium.find_element_by_id( 'id_phone_number') self.notification = Select( self.selenium.find_element_by_id( 'id_notification_preference')) self.button = self.selenium.find_element_by_xpath( "//button[@type='submit']") return EditPage(self.selenium) @staticmethod def _fill(page): page.username.clear() page.email.clear() page.fname.clear() page.lname.clear() page.phone.clear() page.username.send_keys('parand') page.email.send_keys('*****@*****.**') page.fname.send_keys('Parand') page.lname.send_keys('Alizadeh') page.phone.send_keys('02347898557') page.notification.select_by_visible_text('sms') @staticmethod def __get_text(element): return element.get_attribute('textContent') @staticmethod def __send_keys_scrolling(input_element, keys): _ = input_element.location_once_scrolled_into_view time.sleep(1) input_element.send_keys(keys) def test_empty_parts_edit(self): self.login() page = self.__get_page() username = page.username username.clear() button = page.button button.click() success_set = self.selenium.find_elements_by_xpath( '//*[@id="right-panel"]/div[2]/div/div[1]/div/div') self.assertEqual(len(success_set), 0) def test_successful_edit(self): self.login() page = self.__get_page() self._fill(page) page.button.click() success = self.selenium.find_element_by_xpath( '//*[@id="right-panel"]/div[2]/div/div[1]/div/div') self.assertIn("Profile successfully updated!", self.__get_text(success))
class RegistrationTest(StaticLiveServerTestCase): def setUp(self): self.selenium = WebDriver() self.selenium.implicitly_wait(10) self.__create_users() self.selenium.get('%s%s' % (self.live_server_url, '/admin_panel/reviewers/add')) def tearDown(self): self.selenium.quit() pass def __create_users(self): self.user = User.objects.create_superuser( username="******", email="*****@*****.**", password="******", first_name="kossar", last_name="najafi", phone_number="09147898557", account_number="1234567812345678", notification_preference="S") self.user = User.objects.create_user(username="******", email="*****@*****.**", password="******", first_name="kossar", last_name="najafi", phone_number="09147898557", account_number="1234432112344321", notification_preference="S") self.user = User.objects.create_user(username="******", email="*****@*****.**", password="******", first_name="soroush", last_name="ebadian", phone_number="09147898557", account_number="1234567887654321", notification_preference="S") def login(self): user = User.objects.get(username="******") SessionStore = import_module(settings.SESSION_ENGINE).SessionStore session = SessionStore() session[SESSION_KEY] = User.objects.get(username="******").id session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0] session[HASH_SESSION_KEY] = user.get_session_auth_hash() session.save() cookie = { 'name': settings.SESSION_COOKIE_NAME, 'value': session.session_key, 'path': '/', } self.selenium.add_cookie(cookie) self.selenium.refresh() self.selenium.get('%s%s' % (self.live_server_url, '/admin_panel/reviewers/add')) def __get_page(self): class AddReviewerPage(object): def __init__(self, selenium): self.selenium = selenium self.username = Select( self.selenium.find_element_by_id('id_user')) self.salary = self.selenium.find_element_by_id('id_salary') self.employee = self.selenium.find_element_by_id( 'id_is_employee') self.button = self.selenium.find_element_by_xpath( "//button[@type='submit']") return AddReviewerPage(self.selenium) @staticmethod def __get_text(element): return element.get_attribute('textContent') @staticmethod def _fill(page): page.username.select_by_visible_text('kossar') page.salary.clear() page.salary.send_keys("2000") def test_successful_radd(self): self.login() page = self.__get_page() self._fill(page) page.button.click() self.assertNotIn("add", self.selenium.current_url) def test_empty_parts_add(self): self.login() page = self.__get_page() self._fill(page) page.username.select_by_visible_text("---------") page.button.click() self.assertIn("add", self.selenium.current_url) def test_already_existing_reviewer(self): self.login() page = self.__get_page() self._fill(page) page.button.click() self.selenium.get('%s%s' % (self.live_server_url, '/admin_panel/reviewers/add')) page = self.__get_page() self._fill(page) page.button.click() self.assertIn("add", self.selenium.current_url)
class NotifTest(StaticLiveServerTestCase): def setUp(self): self.selenium = WebDriver() self.user = User.objects.create_superuser(username="******", email="*****@*****.**", password="******", first_name="kossar", last_name="najafi", phone_number="09147898557", account_number="1234567812345678", notification_preference="S") self.selenium.implicitly_wait(10) self.selenium.get('%s%s' % (self.live_server_url, '/admin_panel/send_notification/')) def tearDown(self): self.selenium.quit() def __get_page(self): class NotifPage(object): def __init__(self, selenium): self.selenium = selenium self.subject = self.selenium.find_element_by_id('id_subject') self.text = self.selenium.find_element_by_id("id_notification_text") buttons = self.selenium.find_elements_by_xpath("//button[@type='submit']") self.send_button = buttons[0] self.cancel_button = buttons[1] return NotifPage(self.selenium) def login(self): user = User.objects.get(username="******") SessionStore = import_module(settings.SESSION_ENGINE).SessionStore session = SessionStore() session[SESSION_KEY] = User.objects.get(username="******").id session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0] session[HASH_SESSION_KEY] = user.get_session_auth_hash() session.save() cookie = { 'name': settings.SESSION_COOKIE_NAME, 'value': session.session_key, 'path': '/', } self.selenium.add_cookie(cookie) self.selenium.refresh() self.selenium.get('%s%s' % (self.live_server_url, '/admin_panel/send_notification/')) @staticmethod def _fill(page): page.subject.send_keys('HEllO') page.text.send_keys('Hi! Welcome to Dollarial') def test_successful_notif(self): self.login() page = self.__get_page() self._fill(page) page.send_button.click() self.assertNotIn("send_notification", self.selenium.current_url) def test_cancel_notif(self): self.login() page = self.__get_page() page.cancel_button.click() self.assertNotIn("send_notification", self.selenium.current_url) @staticmethod def __get_text(element): return element.get_attribute('textContent') def test_empty_parts_add(self): self.login() page = self.__get_page() self._fill(page) page.subject.clear() page.send_button.click() self.assertIn("send_notification", self.selenium.current_url)
return True except: return False try: wd.get("https://dev.vetmedical.ru/") wd.find_element_by_css_selector("#sign_in").click() wd.find_element_by_css_selector("#ips_username").click() wd.find_element_by_css_selector("#ips_username").clear() wd.find_element_by_css_selector("#ips_username").send_keys( "Alexander Podobulkin") wd.find_element_by_css_selector("#ips_password").click() wd.find_element_by_css_selector("#ips_password").clear() wd.find_element_by_css_selector("#ips_password").send_keys("210785ap") wd.find_element_by_css_selector("#b-login__submit-form").click() wd.refresh() wd.get( "https://dev.vetmedical.ru/index.php?/forum/9-%D0%BE%D0%B1%D1%89%D0%B8%D0%B5-%D0%BE%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F/" ) wd.find_element_by_css_selector( "#tabs-container > header > div.b-control-buttons > a").click() if wd.find_element_by_css_selector( "#main > div > h1" ).text != "*Создание темы в разделе Общие обсуждения*": raise Exception("not assertText failed") finally: wd.quit() if not success: raise Exception("Test failed.")
class FlightSeleniumTestCase(StaticLiveServerTestCase): fixtures = ['flights_tests.json'] def setUp(self): user = User.objects.create_user( username='******', email='*****@*****.**', password='******', ) user.first_name = 'Bruce' user.last_name = 'Wayne' user.save() flight = Flight(plane=Plane.objects.get(pk='Batman'), start_date=datetime(2020, 1, 1, 1, 0, 0, tzinfo=pytz.UTC), end_date=datetime(2020, 1, 1, 6, 0, 0, tzinfo=pytz.UTC), src_airport=Airport.objects.get(pk='WAW'), dest_airport=Airport.objects.get(pk='TXL')) flight.save() flight = Flight(plane=Plane.objects.get(pk='Superman'), start_date=datetime(2020, 1, 1, 1, 30, 0, tzinfo=pytz.UTC), end_date=datetime(2020, 1, 1, 6, 30, 0, tzinfo=pytz.UTC), src_airport=Airport.objects.get(pk='TXL'), dest_airport=Airport.objects.get(pk='WAW')) flight.save() self.selenium = WebDriver() super(FlightSeleniumTestCase, self).setUp() def tearDown(self): self.selenium.quit() super(FlightSeleniumTestCase, self).tearDown() def test_add_passenger(self): self.selenium.get(self.live_server_url) # login first self.selenium.find_element_by_name('username').send_keys('user') self.selenium.find_element_by_name('password').send_keys('pass') self.selenium.find_element_by_css_selector( 'input[type="submit"]').click() alert = self.selenium.find_element_by_class_name('alert') self.assertIn('alert-success', alert.get_attribute('class')) # move to flights menu and select first one self.selenium.find_element_by_link_text('Flights').click() self.selenium.find_element_by_link_text('1').click() # click 'Buy ticket' button and check if user shows up on list self.selenium.find_element_by_css_selector( 'input[value="Buy ticket"]').click() self.selenium.find_element_by_xpath( '//*[@id="headingOne"]/button').click() name_td = self.selenium.find_element_by_xpath( '//*[@id="collapseOne"]/div/table/tbody/tr/td[2]') self.assertEquals('Bruce Wayne', name_td.text) def test_crew_add(self): crew = Crew(captain_firstname='Bruce', captain_lastname='Wayne') crew.save() cm = CrewMember(firstname='Clark', lastname='Kent') cm.save() crew.members.add(cm) crew.save() action_chains = ActionChains(self.selenium) self.selenium.get(self.live_server_url) # login first self.selenium.find_element_by_link_text('Crews').click() self.selenium.find_element_by_name('username').send_keys('user') self.selenium.find_element_by_name('password').send_keys('pass') self.selenium.find_element_by_xpath( '//*[@id="login-form"]/input[3]').click() WebDriverWait( self.selenium, 3).until(lambda driver: driver.find_element_by_class_name('alert')) alert = self.selenium.find_element_by_class_name('alert') self.assertIn('alert-success', alert.get_attribute('class')) # setup date of flights self.selenium.find_element_by_id('choose-date').send_keys('2020-01-01') WebDriverWait(self.selenium, 3).until(lambda driver: driver.find_element_by_xpath( '//*[@id="flights"]/tr[1]')) # double click on first flight row = self.selenium.find_element_by_xpath('//*[@id="flights"]/tr[1]') action_chains.double_click(row).perform() # choose first crew WebDriverWait(self.selenium, 3).until(lambda driver: driver.find_element_by_xpath( '//*[@id="select-crew"]/option[2]')) self.selenium.find_element_by_xpath( '//*[@id="select-crew"]/option[2]').click() # send 'Change crew' and wait for change query to end self.selenium.find_element_by_xpath( '//*[@id="crew-form"]/div[7]/input').click() WebDriverWait( self.selenium, 3).until(lambda driver: driver.find_element_by_class_name('alert')) alert = self.selenium.find_element_by_class_name('alert') self.assertIn('alert-success', alert.get_attribute('class')) # refresh page and check if crew changed self.selenium.refresh() action_chains = ActionChains(self.selenium) self.selenium.find_element_by_id('choose-date').send_keys('2020-01-01') WebDriverWait(self.selenium, 3).until(lambda driver: driver.find_element_by_xpath( '//*[@id="flights"]/tr[1]')) new_crew = self.selenium.find_element_by_xpath( '//*[@id="flights"]/tr[1]/td[6]/span[@class="captain"]') self.assertEquals('Bruce Wayne', new_crew.text) # double click on second flight row2 = self.selenium.find_element_by_xpath('//*[@id="flights"]/tr[2]') action_chains.double_click(row2).perform() # choose first crew WebDriverWait(self.selenium, 3).until(lambda driver: driver.find_element_by_xpath( '//*[@id="select-crew"]/option[2]')) self.selenium.find_element_by_xpath( '//*[@id="select-crew"]/option[2]').click() # send 'Change crew' and wait for change query to end self.selenium.find_element_by_xpath( '//*[@id="crew-form"]/div[7]/input').click() WebDriverWait( self.selenium, 3).until(lambda driver: driver.find_element_by_class_name('alert')) alert = self.selenium.find_element_by_class_name('alert') self.assertIn('alert-danger', alert.get_attribute('class')) # check if crews didn't change self.selenium.refresh() self.selenium.find_element_by_id('choose-date').send_keys('2020-01-01') WebDriverWait(self.selenium, 3).until(lambda driver: driver.find_element_by_xpath( '//*[@id="flights"]/tr[1]')) crew1 = self.selenium.find_element_by_xpath( '//*[@id="flights"]/tr[1]/td[6]/span[@class="captain"]') crew2 = self.selenium.find_element_by_xpath( '//*[@id="flights"]/tr[2]/td[6]/span[@class="captain"]') self.assertEquals('Bruce Wayne', crew1.text) self.assertEquals('None', crew2.text)