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