class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.test_url = 'http://automationpractice.com/index.php' cls.test_title = 'My Store' cls.header_text = 'Automation Practice Website' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None # @unittest.skip('not ready') def test_chrome(self): browser = 'chrome' self.generic_method(browser) # @unittest.skip('not ready') def test_ie(self): browser = 'ie' self.generic_method(browser) # @unittest.skip('not ready') def test_opera(self): browser = 'opera' self.generic_method(browser) # @unittest.skip('not ready') def test_mozilla(self): browser = 'mozilla' self.generic_method(browser) # @unittest.skip('not ready') def test_edge(self): browser = 'edge' self.generic_method(browser) def generic_method(self, browser): try: self.open_test_web_page(browser) header = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, 'h1'))) self.assertEqual(self.header_text, header.text) except Exception as ec: print('\nERROR: {}'.format(ec)) self.take_screen_shot() raise def open_test_web_page(self, browser): # Open test web page and verify URL + Title self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 15).until(EC.title_contains(self.test_title)) time.sleep(1) self.assertEqual(self.test_url, self.driver.current_url) self.assertEqual(self.test_title, self.driver.title) def take_screen_shot(self): """Take a Screen-shot of the webpage when test Failed.""" now = datetime.datetime.now() filename = 'screenshot-{}-{}.png'.format( self.driver.name, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) self.driver.save_screenshot(filename) print('\nScreenshot saved as {}'.format(filename)) def screenshots_collector(self): ''' Collect all screenshots and put them into screenshots directory :return: ''' import os import shutil screenshots_folder = 'screenshots' if not os.path.exists(os.curdir + '\\screenshots'): os.mkdir(screenshots_folder) now = datetime.datetime.now() folder_name = '{}\\screenshots_{}_{}'.format( screenshots_folder, self.driver.name, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) files = os.listdir(os.curdir) for file in files: if '.png' in str(file): if not os.path.exists(os.curdir + '\\' + folder_name): os.mkdir(folder_name) shutil.move( file.split('\\')[-1], os.curdir + '\\' + folder_name) def tearDown(self): self.screenshots_collector() self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.test_title = 'Example Domain' cls.test_url = "http://www.example.com/" cls.cookie = {'name': 'foo', 'value': 'bar'} cls.page_title_xpath = '/html/body/div/h1' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' self.generic_method(browser) def test_ie(self): browser = 'ie' self.generic_method(browser) def test_opera(self): browser = 'opera' self.generic_method(browser) def test_mozilla(self): browser = 'mozilla' self.generic_method(browser) def test_edge(self): browser = 'edge' self.generic_method(browser) def generic_method(self, browser): self.open_web_browser(browser) # Now set the cookie. This one's valid for the entire domain self.driver.add_cookie(self.cookie) # Verify the imported cookies self.assertTrue( self.cookie['name'] == self.driver.get_cookies()[0]['name']) self.assertTrue( self.cookie['value'] == self.driver.get_cookies()[0]['value']) def open_web_browser(self, browser): try: # Go to the correct domain self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False finally: self.assertEqual(self.test_url, self.driver.current_url) self.assertEqual(self.test_title, self.driver.title) def tearDown(self): for handle in self.driver.window_handles: self.driver.switch_to.window(handle) self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.jscript_alerts_url = 'https://www.seleniumeasy.com/test/javascript-alert-box-demo.html' cls.jscript_alerts_title = 'Selenium Easy Demo - Automate All Scenarios' cls.jscript_alert_box_btn_xpath = '/html/body/div[2]/div/div[2]/div[1]/div[2]/button' cls.jscript_confirm_box_xpath = '/html/body/div[2]/div/div[2]/div[2]/div[2]/button' cls.configrm_demo_id = 'confirm-demo' cls.jscript_alert_box_prompt_xpath = '/html/body/div[2]/div/div[2]/div[3]/div[2]/button' cls.promt_demo_id = 'prompt-demo' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' self.generic_method(browser) def test_ie(self): browser = 'ie' self.generic_method(browser) def test_opera(self): browser = 'opera' self.generic_method(browser) def test_mozilla(self): browser = 'mozilla' self.generic_method(browser) def test_edge(self): browser = 'edge' self.generic_method(browser) def generic_method(self, browser): self.open_web_browser(browser) try: # Test Java Script Alert Box self.alert_box_testing() # Test Java Script Confirm Box self.confirm_box_testing() # Test Java Script Prompt Box self.prompt_box_testing() except WebDriverException as ec: self.screen_shot() raise def alert_box_testing(self): # Open Java Script Alert Box self.driver.find_element(By.XPATH, self.jscript_alert_box_btn_xpath).click() alert_box = WebDriverWait(self.driver, 15).until( expected_conditions.alert_is_present()) # Verify alert box text and close the alert self.assertEqual('I am an alert box!', alert_box.text) time.sleep(1) alert_box.accept() # Back to the main window self.driver.switch_to.default_content() def confirm_box_testing(self): # Open Java Script Confirm Box self.driver.find_element(By.XPATH, self.jscript_confirm_box_xpath).click() confirm_box = WebDriverWait(self.driver, 15).until( expected_conditions.alert_is_present()) # Verify text >>> Hit OK button self.assertTrue('Press a button!' in confirm_box.text) time.sleep(1) confirm_box.accept() # Verify the result self.driver.switch_to.default_content() self.assertEqual( 'You pressed OK!', self.driver.find_element(By.ID, self.configrm_demo_id).text) time.sleep(1) # Open alert again self.driver.find_element(By.XPATH, self.jscript_confirm_box_xpath).click() confirm_box = WebDriverWait(self.driver, 15).until( expected_conditions.alert_is_present()) # Verify text >>> Hit CANCEL button self.assertTrue('Press a button!' in confirm_box.text) time.sleep(1) confirm_box.dismiss() # Verify the result self.driver.switch_to.default_content() self.assertEqual( 'You pressed Cancel!', self.driver.find_element(By.ID, self.configrm_demo_id).text) time.sleep(1) def prompt_box_testing(self): # Open prompt box and verify prompt text self.driver.find_element(By.XPATH, self.jscript_alert_box_prompt_xpath).click() prompt_box = WebDriverWait(self.driver, 15).until( expected_conditions.alert_is_present()) self.assertEqual('Please enter your name', prompt_box.text) time.sleep(1) # Cancel it and verify the result prompt_box.dismiss() self.driver.switch_to.default_content() self.assertEqual( '', self.driver.find_element(By.ID, self.promt_demo_id).text) time.sleep(1) # Open prompt again self.driver.switch_to.default_content() self.driver.find_element(By.XPATH, self.jscript_alert_box_prompt_xpath).click() prompt_box = WebDriverWait(self.driver, 15).until( expected_conditions.alert_is_present()) # Type name in prompt box time.sleep(1) prompt_box.send_keys('John Snow') time.sleep(1) # Accept it and verify text prompt_box.accept() self.driver.switch_to.default_content() self.assertEqual( 'You have entered \'John Snow\' !', self.driver.find_element(By.ID, self.promt_demo_id).text) time.sleep(1) def open_web_browser(self, browser): try: # Launch webdriver on test web page + maximize window: self.driver = Driver(browser).get_driver() self.driver.maximize_window() self.driver.get(self.jscript_alerts_url) WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.jscript_alerts_title)) except TimeoutException as ec: print('\n', ec) is_webpage_loaded = False while not is_webpage_loaded: is_webpage_loaded = True try: if self.driver is not None: self.driver.quit() self.driver = Driver(browser).get_driver() self.driver.maximize_window() self.driver.get(self.jscript_alerts_url) WebDriverWait(self.driver, 5).until( expected_conditions.title_is( self.jscript_alerts_title)) except TimeoutException as ec: print('\n', ec) is_webpage_loaded = False finally: # Verify URL + Title self.assertEqual(self.jscript_alerts_url, self.driver.current_url) self.assertEqual(self.jscript_alerts_title, self.driver.title) def screen_shot(self): """Take a Screen-shot of the webpage when test Failed.""" now = datetime.datetime.now() filename = 'screenshot-{}-{}.png'.format( self.driver.name, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) self.driver.save_screenshot(filename) print('\nScreenshot saved as {}'.format(filename)) @staticmethod def screenshots_collector(): ''' Collect all screenshots and put them into screenshots directory :return: ''' import os import shutil screenshots_folder = 'screenshots' if not os.path.exists(os.curdir + '\\screenshots'): os.mkdir(screenshots_folder) now = datetime.datetime.now() folder_name = '{}\\screenshots_{}'.format( screenshots_folder, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) files = os.listdir(os.curdir) for file in files: if '.png' in str(file): if not os.path.exists(os.curdir + '\\' + folder_name): os.mkdir(folder_name) shutil.move( file.split('\\')[-1], os.curdir + '\\' + folder_name) def tearDown(self): for handle in self.driver.window_handles: self.driver.switch_to.window(handle) self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.test_url = 'https://www.seleniumeasy.com/test/' cls.test_title = 'Selenium Easy - Best Demo website to practice Selenium Webdriver Online' cls.simple_form_demo_xpath = '/html/body/div[3]/div/div[1]/div/div[2]/ul/li/ul/li[1]/ul/li[1]/a' cls.form_demo_title = 'Selenium Easy Demo - Simple Form to Automate using Selenium' cls.check_box_demo_xpath = '/html/body/div[2]/div/div[1]/div/div[2]/ul/li/ul/li[1]/ul/li[2]/a' cls.check_box_demo_title = 'Selenium Easy - Checkbox demo for automation using selenium' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' self.generic_method(browser) def test_ie(self): browser = 'ie' self.generic_method(browser) def test_opera(self): browser = 'opera' self.generic_method(browser) def test_mozilla(self): browser = 'mozilla' self.generic_method(browser) def test_edge(self): browser = 'edge' self.generic_method(browser) def generic_method(self, browser): self.open_web_browser(browser) # Go to main menu and expand it self.driver.find_element( By.XPATH, '/html/body/div[3]/div/div[1]/div/div[2]/ul/li/ul/li[1]/a').click( ) time.sleep(1) # open simple form demo page simple_form_menu_item = WebDriverWait(self.driver, 10).\ until(expected_conditions.presence_of_element_located((By.XPATH, self.simple_form_demo_xpath))) simple_form_menu_item.click() time.sleep(1) self.assertEqual(self.form_demo_title, self.driver.title) # open check box demo page self.driver.find_element( By.XPATH, '/html/body/div[2]/div/div[1]/div/div[2]/ul/li/ul/li[1]/a').click( ) check_box_demo = WebDriverWait(self.driver, 10).\ until(expected_conditions.presence_of_element_located((By.XPATH, self.check_box_demo_xpath))) check_box_demo.click() time.sleep(1) self.assertEqual(self.check_box_demo_title, self.driver.title) # Go back to simple form demo page: self.driver.back() time.sleep(1) self.assertEqual(self.form_demo_title, self.driver.title) # Go back to main page: self.driver.back() time.sleep(1) self.assertEqual(self.test_title, self.driver.title) # Go forward to simple form demo page self.driver.forward() time.sleep(1) self.assertEqual(self.form_demo_title, self.driver.title) # Go forward to check box demo page self.driver.forward() time.sleep(1) self.assertEqual(self.check_box_demo_title, self.driver.title) def open_web_browser(self, browser): try: # Open test web site self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False finally: self.assertEqual(self.test_url, self.driver.current_url) self.assertEqual(self.test_title, self.driver.title) def tearDown(self): for handle in self.driver.window_handles: self.driver.switch_to.window(handle) self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.test_url = 'http://newtours.demoaut.com/' cls.test_title = 'Welcome: Mercury Tours' cls.login_btn_name = 'login' cls.test_login_url = 'http://newtours.demoaut.com/mercurysignon.php' cls.test_login_title = 'Sign-on: Mercury Tours' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' self.generic_method(browser) def test_ie(self): browser = 'ie' self.generic_method(browser) def test_opera(self): browser = 'opera' self.generic_method(browser) def test_mozilla(self): browser = 'mozilla' self.generic_method(browser) def test_edge(self): browser = 'edge' self.generic_method(browser) def generic_method(self, browser): # Allocate LOGIN button and click on it self.open_test_web_page(browser) login_btn = self.driver.find_element(By.NAME, self.login_btn_name) login_btn.click() time.sleep(1) # wait up to 10 secs for the url to change or else `TimeOutException` is raised. wait = WebDriverWait(self.driver, 10) wait.until(expected_conditions.title_is(self.test_login_title)) # Verify that you are on the LOGIN web page new_url = self.driver.current_url self.assertTrue(self.test_url in new_url) self.assertEqual(self.test_login_title, self.driver.title) time.sleep(1) # Try to allocate non existing object with self.assertRaises(NoSuchElementException): self.driver.find_element(By.NAME, 'some_name') def open_test_web_page(self, browser): # Open test web page and verify URL + Title try: self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 15).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 15).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False finally: self.assertEqual(self.test_url, self.driver.current_url) self.assertEqual(self.test_title, self.driver.title) def tearDown(self): for handle in self.driver.window_handles: self.driver.switch_to.window(handle) self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.url = 'http://demo.automationtesting.in/Windows.html' cls.new_url = 'http://www.sakinalium.in/' cls.origin_window_name = 'Frames & windows' cls.new_window_name = 'Sakinalium | Home' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' try: self.generic_method(browser) except Exception: self.take_screen_shot() raise def test_ie(self): browser = 'ie' try: self.generic_method(browser) except Exception: self.take_screen_shot() raise def test_opera(self): browser = 'opera' try: self.generic_method(browser) except Exception: self.take_screen_shot() raise def test_mozilla(self): browser = 'mozilla' try: self.generic_method(browser) except Exception: self.take_screen_shot() raise def test_edge(self): browser = 'edge' try: self.generic_method(browser) except Exception: self.take_screen_shot() raise def generic_method(self, browser): self.open_web_browser(browser) # Get current window handle: main_window = self.driver.current_window_handle try: # Hit on click button and switch to new window: btn = WebDriverWait(self.driver, 5).until( expected_conditions.element_to_be_clickable((By.XPATH, '/html/body/div[1]/div/div/div/div[2]/div[1]/a/button'))) btn.click() time.sleep(1) # New tabs will be the last object in window_handles: self.driver.switch_to.window(self.driver.window_handles[-1]) self.driver.maximize_window() except WebDriverException as ec: print('\n', ec) self.screen_shot() raise # Wait for element to appear. # Implemented due to a very slow performance of IE and FireFox. try: WebDriverWait(self.driver, 5).until(expected_conditions.title_is(self.new_window_name)) except TimeoutException as ec: is_loaded = False while not is_loaded: is_loaded = True try: print('\n', ec) self.driver.close() time.sleep(1) self.driver.switch_to.window(main_window) btn.click() self.driver.switch_to.window(self.driver.window_handles[-1]) self.driver.maximize_window() WebDriverWait(self.driver, 5).until(expected_conditions.title_is(self.new_window_name)) except WebDriverException as ec: print('\n', ex) is_loaded = False # Verify new tab name + url: self.assertEqual(self.new_window_name, self.driver.title) self.assertEqual(self.new_url, self.driver.current_url) time.sleep(1) # Get a new window handle: new_window = self.driver.current_window_handle # Switch back to original window: self.driver.switch_to.window(main_window) self.assertEqual(self.origin_window_name, self.driver.title) self.assertEqual(self.url, self.driver.current_url) time.sleep(1) # Switch to a new tab: self.driver.switch_to.window(new_window) self.assertEqual(self.new_window_name, self.driver.title) self.assertEqual(self.new_url, self.driver.current_url) time.sleep(1) def open_web_browser(self, browser): try: # Launch webdriver on test web page + maximize window: self.driver = Driver(browser).get_driver() self.driver.get(self.url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until(expected_conditions.title_is(self.origin_window_name)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser).get_driver() self.driver.get(self.url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until(expected_conditions.title_is(self.origin_window_name)) except TimeoutException as ec: print('\n', ec) is_loaded = False finally: self.assertEqual(self.url, self.driver.current_url) self.assertEqual(self.origin_window_name, self.driver.title) def screen_shot(self): """Take a Screen-shot of the webpage when test Failed.""" now = datetime.datetime.now() filename = 'screenshot-{}-{}.png'.format(self.driver.name, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) self.driver.save_screenshot(filename) print('\nScreenshot saved as {}'.format(filename)) @staticmethod def screenshots_collector(): ''' Collect all screenshots and put them into screenshots directory :return: ''' import os import shutil screenshots_folder = 'screenshots' if not os.path.exists(os.curdir + '\\screenshots'): os.mkdir(screenshots_folder) now = datetime.datetime.now() folder_name = '{}\\screenshots_{}'.format(screenshots_folder, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) files = os.listdir(os.curdir) for file in files: if '.png' in str(file): if not os.path.exists(os.curdir + '\\' + folder_name): os.mkdir(folder_name) shutil.move(file.split('\\')[-1], os.curdir + '\\' + folder_name) def tearDown(self): for handle in self.driver.window_handles: self.driver.switch_to.window(handle) self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): cls.screenshots_collector() if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.test_url = "https://www.google.com/doodles/" cls.test_title = 'Google Doodles' cls.id = 'passwd-id' cls.name = 'passwd' cls.xpath = '//input[@id=\'passwd-id\']' cls.search_field_name = 'q' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' self.using_find_element_func(browser) def test_ie(self): browser = 'ie' self.using_find_element_func(browser) def test_edge(self): browser = 'edge' self.using_find_element_func(browser) def test_opera(self): browser = 'opera' self.using_find_element_func(browser) def test_mozilla(self): browser = 'mozilla' self.using_find_element_func(browser) def using_find_element_func(self, browser): self.open_web_browser(browser) # 1. find element by id. # If nothing can be found, a NoSuchElementException will be raised. with self.assertRaises(NoSuchElementException): self.driver.find_element_by_id(self.id) # 2. find element by name. # If nothing can be found, a NoSuchElementException will be raised. with self.assertRaises(NoSuchElementException): self.driver.find_element_by_name(self.name) # 3. find element by xpath. # If nothing can be found, a NoSuchElementException will be raised. with self.assertRaises(NoSuchElementException): self.driver.find_element_by_xpath(self.xpath) # 4. Send keys. # It is possible to call send_keys on any element, # which makes it possible to test keyboard shortcuts such as those used on GMail. search_field = self.driver.find_element_by_name(self.search_field_name) search_field.send_keys('python') time.sleep(2) search_field.send_keys(" and some", Keys.ARROW_LEFT) time.sleep(2) search_field.send_keys(" and some", Keys.ARROW_RIGHT) time.sleep(2) # You can easily clear the contents of a text field # or textarea with the clear method search_field.clear() def open_web_browser(self, browser): try: # Open web browser and verify page title: self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False finally: self.assertEqual(self.test_url, self.driver.current_url) self.assertEqual(self.test_title, self.driver.title) def tearDown(self): self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.test_url = 'http://automationpractice.com/index.php' cls.search_id = 'search_query_top' cls.test_title = 'My Store' cls.search_item = 'shirt' cls.search_btn_name = 'submit_search' cls.search_title = 'Search - My Store' cls.expected_search_result = 'SEARCH "SHIRT" \n1 result has been found.' cls.search_title_xpath = '/html/body/div/div[2]/div/div[3]/div[2]/h1' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' self.generic_method(browser) def test_ie(self): browser = 'ie' self.generic_method(browser) def test_opera(self): browser = 'opera' self.generic_method(browser) def test_mozilla(self): browser = 'mozilla' self.generic_method(browser) def test_edge(self): browser = 'edge' self.generic_method(browser) def generic_method(self, browser): self.open_test_web_page(browser) # test for non existing item with self.assertRaises(NoSuchElementException): self.driver.find_element(By.ID, 'noname') # allocate search field search = self.driver.find_element(By.ID, self.search_id) # verify that search field is empty self.assertEqual('', search.get_attribute('value')) # enter search item and verify field value search.send_keys(self.search_item) self.assertEqual(self.search_item, search.get_attribute('value')) # hit on search button search_btn = self.driver.find_element(By.NAME, self.search_btn_name) search_btn.click() # wait till search page is loaded WebDriverWait(self.driver, 10).until( expected_conditions.presence_of_element_located( (By.XPATH, self.search_title_xpath))) time.sleep(1) search_header = self.driver.find_element(By.XPATH, self.search_title_xpath) # Verify search results # \xa0 is actually non-breaking space in Latin1 (ISO 8859-1), also chr(160). # You should replace it result = search_header.text.replace(u'\xa0', u'') self.assertListEqual(list(self.expected_search_result.lower().split()), list(result.strip().lower().split())) def open_test_web_page(self, browser): # Open test web page and verify URL + Title try: self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 15).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 15).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False finally: self.assertEqual(self.test_url, self.driver.current_url) self.assertEqual(self.test_title, self.driver.title) def tearDown(self): for handle in self.driver.window_handles: self.driver.switch_to.window(handle) self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()
class SimpleUsage(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.test_url = "http://www.python.org" cls.test_name = 'q' cls.test_str = "pycon" cls.text_message = "No results found." cls.test_title = "Welcome to Python.org" def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): self.simple_usage_generic_method('chrome') def test_edge(self): self.simple_usage_generic_method('edge') def test_ie(self): self.simple_usage_generic_method('ie') def test_mozilla(self): self.simple_usage_generic_method('mozilla') def test_opera(self): self.simple_usage_generic_method('opera') def simple_usage_generic_method(self, browser_name): try: self.driver = Driver(browser_name).get_driver() # create a drivers object self.driver.get(self.test_url) # open web browser on test web page self.driver.maximize_window() WebDriverWait(self.driver, 15).until(expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser_name).get_driver() # create a drivers object self.driver.get(self.test_url) # open web browser on test web page self.driver.maximize_window() WebDriverWait(self.driver, 15).until(expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False assert self.test_title in self.driver.title # verify webpage title elem = self.driver.find_element_by_name(self.test_name) # finds HTML element by name elem.clear() # clear the field elem.send_keys(self.test_str) # type test string in the search field elem.send_keys(Keys.RETURN) # press ENTER assert self.text_message not in self.driver.page_source # look for test message def tearDown(self): for handle in self.driver.window_handles: self.driver.switch_to.window(handle) self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.test_url = 'https://jqueryui.com/droppable/' cls.test_title = 'Droppable | jQuery UI' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' self.generic_method(browser) def test_ie(self): browser = 'ie' self.generic_method(browser) def test_opera(self): browser = 'opera' self.generic_method(browser) def test_mozilla(self): browser = 'mozilla' self.generic_method(browser) def test_edge(self): browser = 'edge' self.generic_method(browser) def generic_method(self, browser): self.open_web_page(browser) iframe = self.driver.find_element( By.XPATH, '/html/body/div[1]/div[2]/div/div[1]/iframe') self.driver.switch_to.frame(iframe) try: source = WebDriverWait(self.driver, 5).until( expected_conditions.presence_of_element_located( (By.ID, 'draggable'))) target = WebDriverWait(self.driver, 5).until( expected_conditions.presence_of_element_located( (By.ID, 'droppable'))) except Exception as ec: self.take_screen_shot() raise self.assertEqual("Drop here", target.text) time.sleep(2) actions = ActionChains(self.driver) actions.drag_and_drop(source, target).perform() time.sleep(2) try: self.assertEqual("Dropped!", target.text) except Exception as e: print('\nERROR: ', e.args) self.take_screen_shot() raise def open_web_page(self, browser): try: # Open web browser and verify page title: self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.test_title)) except TimeoutException as ec: print('\n', ec) is_loaded = False finally: self.assertEqual(self.test_url, self.driver.current_url) self.assertEqual(self.test_title, self.driver.title) def take_screen_shot(self): """Take a Screen-shot of the webpage when test Failed.""" now = datetime.datetime.now() filename = 'screenshot-{}-{}.png'.format( self.driver.name, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) self.driver.save_screenshot(filename) print('\nScreenshot saved as {}'.format(filename)) @staticmethod def screenshots_collector(): ''' Collect all screenshots and put them into screenshots directory :return: ''' import os import shutil screenshots_folder = 'screenshots' if not os.path.exists(os.curdir + '\\screenshots'): os.mkdir(screenshots_folder) now = datetime.datetime.now() folder_name = '{}\\screenshots_{}'.format( screenshots_folder, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) files = os.listdir(os.curdir) for file in files: if '.png' in str(file): if not os.path.exists(os.curdir + '\\' + folder_name): os.mkdir(folder_name) shutil.move( file.split('\\')[-1], os.curdir + '\\' + folder_name) def tearDown(self): self.driver.stop_client() self.driver.close() @classmethod def tearDownClass(cls): cls.screenshots_collector() if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.url = 'https://accounts.google.com/signup/v2/webcreateaccount?service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&hl=en-GB&flowName=GlifWebSignIn&flowEntry=SignUp' cls.driver = None cls.title = 'Create your Google Account' cls.field_name = [ 'firstName', 'lastName', 'Username', 'Passwd', 'ConfirmPasswd' ] cls.user_account = { 'firstName': 'John', 'lastName': 'Snow', 'Username': '******', 'Passwd': 'The1AndOnly!', 'ConfirmPasswd': 'The1AndOnly!' } def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' try: self.generic_method(browser) except Exception: self.take_screen_shot() raise def test_opera(self): browser = 'opera' try: self.generic_method(browser) except Exception: self.take_screen_shot() raise def test_mozilla(self): browser = 'mozilla' try: self.generic_method(browser) except Exception: self.take_screen_shot() raise def test_edge(self): browser = 'edge' try: self.generic_method(browser) except Exception: self.take_screen_shot() raise def test_ie(self): browser = 'ie' self.generic_method(browser) def generic_method(self, browser): self.open_web_browser(browser) # Set predefine value for each field from # 'Create your Google Account' registration form: for name in self.field_name: element = self.driver.find_element_by_name(name) element.clear() element.send_keys(self.user_account[name]) # Verify all entered values: for name in self.field_name: expected = self.user_account[name] actual = self.driver.find_element_by_name(name).get_attribute( 'value') # print('expected: {}, actual: {}'.format(expected, actual)) # debug only self.assertEqual(expected, actual) # click on aye button in order to make # 'Confirm' field value visible: is_pswd_visible_btn = self.driver.find_element( By.XPATH, '/html/body/div[1]/div/div[2]/' 'div[1]/div[2]/form/div[2]/div/' 'div[1]/div[3]/div[2]/div') # verify that 'Confirm' field value is visible: expected = 'password' actual = self.driver.find_element_by_name( self.field_name[-1]).get_attribute("type") self.assertEqual(expected, actual) time.sleep(1) # click on aye button in order to make # 'Confirm' field value encrypted: is_pswd_visible_btn.click() # verify that 'Confirm' field value is visible: expected = 'text' actual = self.driver.find_element_by_name( self.field_name[-1]).get_attribute("type") self.assertEqual(expected, actual) time.sleep(1) # click on aye button in order to make # 'Confirm' field value encrypted: is_pswd_visible_btn.click() # verify that 'Confirm' field value is visible: expected = 'password' actual = self.driver.find_element_by_name( self.field_name[-1]).get_attribute("type") self.assertEqual(expected, actual) time.sleep(1) def take_screen_shot(self): """Take a Screen-shot of the webpage when test Failed.""" now = datetime.datetime.now() filename = 'screenshot-{}-{}.png'.format( self.driver.name, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) self.driver.save_screenshot(filename) print('\nScreenshot saved as {}'.format(filename)) def open_web_browser(self, browser): try: # Open web browser and verify page title: self.driver = Driver(browser).get_driver() self.driver.get(self.url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_contains(self.title)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser).get_driver() self.driver.get(self.url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.title)) except TimeoutException as ec: print('\n', ec) is_loaded = False finally: self.assertEqual(self.url, self.driver.current_url) self.assertEqual(self.title, self.driver.title) @staticmethod def screenshots_collector(): ''' Collect all screenshots and put them into screenshots directory :return: ''' import os import shutil screenshots_folder = 'screenshots' if not os.path.exists(os.curdir + '\\screenshots'): os.mkdir(screenshots_folder) now = datetime.datetime.now() folder_name = '{}\\screenshots_{}'.format( screenshots_folder, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) files = os.listdir(os.curdir) for file in files: if '.png' in str(file): if not os.path.exists(os.curdir + '\\' + folder_name): os.mkdir(folder_name) shutil.move( file.split('\\')[-1], os.curdir + '\\' + folder_name) def tearDown(self): self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): cls.screenshots_collector() if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.url = 'http://demo.automationtesting.in/Frames.html' cls.window_name = 'Frames' cls.text_field_xpath = '/html/body/section/div/div/div/input' cls.single_iframe_btn_xpath = '/html/body/section/div[1]/div/div/div/div[1]/div/ul/li[1]/a' cls.single_iframe_id = 'singleframe' cls.multiple_iframes_btn_xpath = '/html/body/section/div[1]/div/div/div/div[1]/div/ul/li[2]/a' cls.multiple_frames_xpath = '/html/body/section/div[1]/div/div/div/div[2]/div[2]/iframe' cls.single_inside_multiple_iframe_xpath = '/html/body/section/div/div/iframe' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None def test_chrome(self): browser = 'chrome' self.generic_method(browser) def test_ie(self): browser = 'ie' self.generic_method(browser) def test_opera(self): browser = 'opera' self.generic_method(browser) def test_mozilla(self): browser = 'mozilla' self.generic_method(browser) def test_edge(self): browser = 'edge' self.generic_method(browser) def generic_method(self, browser): self.open_web_browser(browser) # detect button single_iframe_btn = self.driver.find_element( By.XPATH, self.single_iframe_btn_xpath) # Click on 'Single iframe' button >>> # enter single iframe >>> single_iframe_btn.click() single_iframe = self.driver.find_element(By.ID, self.single_iframe_id) self.driver.switch_to.frame(single_iframe) # write text (single iframe) inside text field >>> # exit iframe txt_field = self.driver.find_element(By.XPATH, self.text_field_xpath) txt_field.send_keys('single iframe') time.sleep(1) self.assertEqual('single iframe', txt_field.get_attribute('value')) self.driver.switch_to.default_content() # detect button + click on it multiple_iframes_btn = self.driver.find_element( By.XPATH, self.multiple_iframes_btn_xpath) multiple_iframes_btn.click() # detect + switch to multiple iframe # implemented with wait due to slow performance of IE and FireFox wait = WebDriverWait(self.driver, 5) try: wait.until( expected_conditions.frame_to_be_available_and_switch_to_it( self.driver.find_element(By.XPATH, self.multiple_frames_xpath))) except TimeoutException as ec: print('\n', ec) print('\nTrying to refresh...') self.driver.refresh() wait.until( expected_conditions.frame_to_be_available_and_switch_to_it( self.driver.find_element(By.XPATH, self.multiple_frames_xpath))) # detect inner frame + switch to it inner_frame = self.driver.find_element( By.XPATH, self.single_inside_multiple_iframe_xpath) self.driver.switch_to.frame(inner_frame) # write text (single iframe) inside text field >>> # exit iframe try: WebDriverWait(self.driver, 5).until( expected_conditions.element_to_be_clickable( (By.XPATH, self.text_field_xpath))) except TimeoutException as ec: print('\n', ec) self.driver.switch_to.default_content() # detect inner frame + switch to it self.driver.switch_to.frame(inner_frame) WebDriverWait(self.driver, 5).until( expected_conditions.element_to_be_clickable( (By.XPATH, self.text_field_xpath))) txt_field = self.driver.find_element(By.XPATH, self.text_field_xpath) txt_field.send_keys('inner iframe') time.sleep(1) self.assertEqual('inner iframe', txt_field.get_attribute('value')) self.driver.switch_to.default_content() # click on iframe buttons back and forward: single_iframe_btn.click() time.sleep(1) multiple_iframes_btn.click() time.sleep(1) def open_web_browser(self, browser): try: # Launch webdriver on test web page + maximize window: self.driver = Driver(browser).get_driver() self.driver.get(self.url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.window_name)) except TimeoutException as ec: print('\n', ec) is_loaded = False while not is_loaded: is_loaded = True try: self.tearDown() self.driver = Driver(browser).get_driver() self.driver.get(self.url) self.driver.maximize_window() WebDriverWait(self.driver, 5).until( expected_conditions.title_is(self.window_name)) except TimeoutException as ec: print('\n', ec) is_loaded = False finally: # Verify page title + url self.assertEqual(self.url, self.driver.current_url) self.assertEqual(self.window_name, self.driver.title) def tearDown(self): for handle in self.driver.window_handles: self.driver.switch_to.window(handle) self.driver.stop_client() self.driver.close() time.sleep(1) @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()
class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = None cls.test_url = 'http://automationpractice.com/index.php' cls.test_title = 'My Store' cls.women_text = 'Women' cls.women_link = 'http://automationpractice.com/index.php?id_category=3&controller=category' cls.women_title = 'Women - My Store' cls.dresses_text = 'Dres' cls.dresses_link = "http://automationpractice.com/index.php?id_category=8&controller=category" cls.dresses_title = 'Dresses - My Store' cls.t_shirts_text = 'T-shirts' cls.t_shirts_path = '//*[@id="block_top_menu"]/ul/li[3]/a' cls.t_shirts_link = "http://automationpractice.com/index.php?id_category=5&controller=category" cls.t_shirts_title = 'T-shirts - My Store' def setUp(self): if self.driver is not None: self.driver.quit() self.driver = None # @unittest.skip('not ready') def test_chrome(self): browser = 'chrome' self.generic_method(browser) # @unittest.skip('not ready') def test_ie(self): browser = 'ie' self.generic_method(browser) # @unittest.skip('not ready') def test_opera(self): browser = 'opera' self.generic_method(browser) # @unittest.skip('not ready') def test_mozilla(self): browser = 'mozilla' self.generic_method(browser) # @unittest.skip('not ready') def test_edge(self): browser = 'edge' self.generic_method(browser) def generic_method(self, browser): try: # 1 open web page self.open_test_web_page(browser) # 2 click on 'Women' button and verify page title women_btn = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable((By.LINK_TEXT, self.women_text))) women_btn.click() WebDriverWait(self.driver, 10).until(EC.title_contains(self.women_title)) self.assertEqual(self.women_title, self.driver.title) self.assertEqual(self.women_link, self.driver.current_url) # 3 dresses_btn = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable( (By.PARTIAL_LINK_TEXT, self.dresses_text))) dresses_btn.click() WebDriverWait(self.driver, 10).until(EC.title_contains(self.dresses_title)) self.assertEqual(self.dresses_title, self.driver.title) self.assertEqual(self.dresses_link, self.driver.current_url) # 4 t_shirts_btn = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable((By.XPATH, self.t_shirts_path))) t_shirts_btn.click() WebDriverWait(self.driver, 10).until(EC.title_contains(self.t_shirts_title)) self.assertEqual(self.t_shirts_title, self.driver.title) self.assertEqual(self.t_shirts_link, self.driver.current_url) except Exception as ec: print('\nERROR: {}'.format(ec)) self.take_screen_shot() raise def open_test_web_page(self, browser): # Open test web page and verify URL + Title self.driver = Driver(browser).get_driver() self.driver.get(self.test_url) self.driver.maximize_window() WebDriverWait(self.driver, 15).until(EC.title_contains(self.test_title)) self.assertEqual(self.test_url, self.driver.current_url) self.assertEqual(self.test_title, self.driver.title) def take_screen_shot(self): """Take a Screen-shot of the webpage when test Failed.""" now = datetime.datetime.now() filename = 'screenshot-{}-{}.png'.format( self.driver.name, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) self.driver.save_screenshot(filename) print('\nScreenshot saved as {}'.format(filename)) def screenshots_collector(self): ''' Collect all screenshots and put them into screenshots directory :return: ''' import os import shutil screenshots_folder = 'screenshots' if not os.path.exists(os.curdir + '\\screenshots'): os.mkdir(screenshots_folder) now = datetime.datetime.now() folder_name = '{}\\screenshots_{}_{}'.format( screenshots_folder, self.driver.name, datetime.datetime.strftime(now, '%Y-%m-%d_%H-%M-%S')) files = os.listdir(os.curdir) for file in files: if '.png' in str(file): if not os.path.exists(os.curdir + '\\' + folder_name): os.mkdir(folder_name) shutil.move( file.split('\\')[-1], os.curdir + '\\' + folder_name) def tearDown(self): self.screenshots_collector() self.driver.stop_client() self.driver.close() @classmethod def tearDownClass(cls): if cls.driver is not None: cls.driver.quit()