Package tlib :: Package base :: Module SeleniumTester
[hide private]
[frames] | no frames]

Source Code for Module tlib.base.SeleniumTester

  1  # noinspection PyPackageRequirements 
  2  import pytest 
  3  import _pytest 
  4  # noinspection PyPackageRequirements 
  5  from selenium import webdriver 
  6  # noinspection PyPackageRequirements 
  7  from WebDriverTester import WebDriverTester 
  8  from TestHelper import Singleton 
  9  from tlib.base import TLibHelper 
 10  from selenium.common.exceptions import TimeoutException 
 11  from selenium.webdriver.support.ui import WebDriverWait 
12 13 14 # noinspection PyMethodParameters 15 -class SeleniumTester(WebDriverTester):
16 __metaclass__ = Singleton 17 _homepage = None 18
19 - def _get_browser(self):
20 """ 21 Returns Instance of the WebDriver browser 22 @rtype: webdriver.Remote 23 """ 24 return self._driver
25
26 - def _set_browser(self, browser):
27 """ 28 Instance of the WebDriver browser 29 @type browser: webdriver.Remote 30 """ 31 self._driver = browser
32 33 browser = property(_get_browser, _set_browser) 34
35 - def _get_homepage(self):
36 """ 37 Instance of the WebDriver homepage 38 """ 39 return self._homepage
40
41 - def _set_homepage(self, homepage):
42 """ 43 Instance of the WebDriver homepage 44 @type homepage: webdriver.Remote 45 """ 46 self._homepage = homepage
47 48 homepage = property(_get_homepage, _set_homepage) 49 50 @pytest.fixture(scope='class', autouse=True)
51 - def initialize_selenium_class(self, browser, request, tlib_logger, initialize_webdriver_class):
52 """ 53 @type browser: webdriver.Remote 54 @type browser: webdriver.Remote 55 @type request: FixtureRequest 56 @type tlib_logger: logging 57 """ 58 self.browser = browser 59 60 # Only initialize homepage if it wasn't already initialized 61 if self.homepage is None: 62 # noinspection PyUnresolvedReferences 63 try: 64 self.homepage = TLibHelper.get_base_url(request, tlib_logger) 65 except _pytest.runner.Failed: 66 #If this exception is triggered, command line option --base_url was not specified 67 self.homepage = ''
68 69 @pytest.fixture(scope='function', autouse=True)
70 - def setup_selenium_test(self, request, browser, test_logger, setup_webdriver_test):
71 """ 72 Goes to homepage before each test, unless marker skipsetup is given 73 74 @type request: FixtureRequest 75 @type test_logger: logging 76 @type browser: webdriver.Remote 77 """ 78 79 #Skip going to homepage if marker skipsetup is specified 80 if "skipsetup" not in request.node.function.__dict__: 81 #Before clearing cookies, need to go to home screen, to ensure it's the current domain 82 self.go_home(save_screenshot=False) 83 browser.delete_all_cookies() 84 self.go_home() 85 else: 86 test_logger.info("Skipping setup")
87
88 - def navigate(self, page, save_screenshot=True):
89 """ 90 Navigate to "page" 91 """ 92 self.test_logger.info(u"Navigating to %s" % page) 93 self.browser.get(page) 94 if save_screenshot: 95 self.save_screenshot(u"Navigate to %s" % page)
96
97 - def go_home(self, save_screenshot=True):
98 """ 99 Navigate to home page 100 """ 101 if self.homepage: 102 self.navigate(self.homepage, save_screenshot=False) 103 if save_screenshot: 104 self.save_screenshot("Homepage")
105
106 - def wait_for_page_loaded(self, timeout=10):
107 """ 108 Waist until document.readyState is equal to complete 109 @type timeout: Integer 110 @param timeout: Number of seconds before timing out 111 """ 112 if self._request.config.getoption('browser') != 'firefox_no_js': 113 condition = lambda *args: self._driver.execute_script("return document.readyState") == "complete" 114 try: 115 WebDriverWait(self.browser, timeout).until(condition) 116 except TimeoutException: 117 self.test_logger.error('Timeout while waiting for page to load') 118 # noinspection PyUnresolvedReferences 119 pytest.fail('Timeout while waiting for page to load') 120 else: 121 time.sleep(2.0) 122 self.tlib_logger.debug("Page '%s' finished loading" % self._driver.current_url)
123