Example #1
0
class Base_Page(Borg, unittest.TestCase):
    "Page class that all page models can inherit from"

    def __init__(self, base_url='http://qxf2.com/', trailing_slash_flag=True):
        "Constructor"
        Borg.__init__(self)
        if self.is_first_time():
            #Do these actions if this the first time this class is initialized
            self.set_directory_structure()
            self.image_url_list = []
            self.msg_list = []
            self.current_console_log_errors = []
            self.window_structure = {}
            self.testrail_flag = False
            self.browserstack_flag = False

            self.reset()

        #We assume relative URLs start without a / in the beginning
        if base_url[-1] != '/' and trailing_slash_flag is True:
            base_url += '/'
        self.base_url = base_url
        self.driver_obj = DriverFactory()
        if self.driver is not None:
            self.start()  #Visit and initialize xpaths for the appropriate page

    def reset(self):
        "Reset the base page object"
        self.driver = None
        self.result_counter = 0  #Increment whenever success or failure are called
        self.pass_counter = 0  #Increment everytime success is called
        self.mini_check_counter = 0  #Increment when conditional_write is called
        self.mini_check_pass_counter = 0  #Increment when conditional_write is called with True
        self.failure_message_list = []
        self.screenshot_counter = 1

    def get_failure_message_list(self):
        "Return the failure message list"
        return self.failure_message_list

    def switch_page(self, page_name):
        "Switch the underlying class to the required Page"
        self.__class__ = PageFactory.PageFactory.get_page_object(
            page_name, base_url=self.base_url).__class__

    def register_driver(self, browserstack_flag, os_name, os_version, browser,
                        browser_version):
        "Register the driver with Page"
        self.driver = self.driver_obj.get_web_driver(browserstack_flag,
                                                     os_name, os_version,
                                                     browser, browser_version)
        self.set_screenshot_dir()  # Create screenshot directory
        self.log_obj = Base_Logging(level=logging.DEBUG)
        self.log_obj.set_stream_handler_level(self.log_obj.getStreamHandler(),
                                              level=logging.DEBUG)
        self.driver.implicitly_wait(5)
        self.driver.maximize_window()
        if (browserstack_flag.lower() == 'y'):
            print "Before registering bs"
            self.register_browserstack()
            self.session_url = self.browserstack_obj.get_session_url()
            self.browserstack_msg = 'BrowserStack session URL:'
            self.write(self.browserstack_msg + '\n' + str(self.session_url))
        self.start()

    def get_current_driver(self):
        "Return current driver"

        return self.driver

    def register_testrail(self):
        "Register TestRail with Page"
        self.testrail_flag = True
        self.tr_obj = Test_Rail()

    def register_browserstack(self):
        "Register Browser Stack with Page"
        self.browserstack_flag = True
        self.browserstack_obj = BrowserStack_Library()

    def get_calling_module(self):
        "Get the name of the calling module"
        calling_file = inspect.stack()[-1][1]
        if 'runpy' in calling_file:
            calling_file = inspect.stack()[5][1]
        calling_filename = calling_file.split(os.sep)

        #This logic bought to you by windows + cygwin + git bash
        if len(calling_filename) == 1:  #Needed for
            calling_filename = calling_file.split('/')

        self.calling_module = calling_filename[-1].split('.')[0]

        return self.calling_module

    def set_directory_structure(self):
        "Setup the required directory structure if it is not already present"
        try:
            screenshots_parent_dir = os.path.abspath(
                os.path.join(os.path.dirname(__file__), '..', 'screenshots'))
            if not os.path.exists(screenshots_parent_dir):
                os.makedirs(screenshots_parent_dir)
        except Exception, e:
            self.write("Exception when trying to set directory structure")
            self.write(str(e))
Example #2
0
class Mobile_Base_Page(Borg, unittest.TestCase):
    "Page class that all page models can inherit from"

    def __init__(self,
                 base_url='https://tn-devel.appspot.com/tap',
                 trailing_slash_flag=True):
        "Constructor"
        Borg.__init__(self)
        if self.is_first_time():
            #Do these actions if this the first time this class is initialized
            self.screenshot_counter = 1
            self.set_directory_structure()
            self.set_screenshot_dir()  # Create screenshot directory
            self.image_url_list = []
            self.msg_list = []
            self.window_structure = {}
            self.testrail_flag = False
            self.browserstack_flag = False
            self.driver = None
            self.result_counter = 0  #Increment whenever success or failure are called
            self.pass_counter = 0  #Increment everytime success is called
            self.mini_check_counter = 0  #Increment when conditional_write is called
            self.mini_check_pass_counter = 0  #Increment when conditional_write is called with True
            self.failure_message_list = []

        #We assume relative URLs start without a / in the beginning
        if base_url[-1] != '/' and trailing_slash_flag is True:
            base_url += '/'
        self.base_url = base_url
        self.driver_obj = DriverFactory()
        self.log_obj = Base_Logging(level=logging.DEBUG)
        self.log_obj.set_stream_handler_level(self.log_obj.getStreamHandler(),
                                              level=logging.DEBUG)
        if self.driver is not None:
            self.start()  #Visit and initialize xpaths for the appropriate page

    def switch_page(self, page_name):
        "Switch the underlying class to the required Page"
        self.__class__ = PageFactory.PageFactory.get_page_object(
            page_name).__class__

    def register_driver(self, sauce_flag, os_name, os_version, browser,
                        browser_version):
        "Register the driver with Page"
        self.driver = self.driver_obj.get_web_driver(sauce_flag, os_name,
                                                     os_version, browser,
                                                     browser_version)
        self.driver.implicitly_wait(5)
        self.driver.maximize_window()
        self.start()

    def register_mobile_driver(self, mobile_os_name, mobile_os_version,
                               device_name, app_package, app_activity,
                               mobile_sauce_flag, device_flag):
        "Register the mobile driver"
        self.driver = self.driver_obj.run_mobile(
            mobile_os_name, mobile_os_version, device_name, app_package,
            app_activity, mobile_sauce_flag, device_flag)
        self.start()

    def get_current_driver(self):
        "Return current driver"
        return self.driver

    def get_console_log(self):
        "Return current browser's console logs from driver"
        return self.driver.get_log('browser')

    def get_driver_title(self):
        "Return the title of the current page"
        return self.driver.title

    def get_current_url(self):
        "Return the current url"
        return self.driver.current_url

    def register_testrail(self):
        "Register TestRail with Page"
        self.testrail_flag = True
        self.tr_obj = Test_Rail()
        self.write('Automation registered with TestRail', level='debug')

    def register_browserstack(self):
        "Register Browser Stack with Page"
        self.browserstack_flag = True
        self.browserstack_obj = BrowserStack_Library()

    def set_locator_conf(self, locator_path):
        "Set the path of the configuration file with locators"
        self.xpath_conf_file = locator_path

    def start(self):
        "Dummy method to be over-written by child classes"
        pass

    def _screenshot(func):
        "Decorator for taking screenshot"

        def wrapper(*args, **kwargs):
            result = func(*args, **kwargs)
            screenshot_name = '%003d' % args[
                0].screenshot_counter + '_' + func.__name__
            args[0].screenshot_counter += 1
            args[0].save_screenshot(screenshot_name)
            return result

        return wrapper

    def _exceptionHandler(f):
        "Decorator to handle exceptions"
        argspec = getargspec(f)

        def inner(*args, **kwargs):
            try:
                return f(*args, **kwargs)
            except Exception, e:
                args[0].write('You have this exception')
                args[0].write('Exception in method: %s' % str(f.__name__))
                args[0].write('PYTHON SAYS: %s' % str(e))

        return inner