def _get_browser(browser=None): """Gets a new instance of a browser to interact""" browser = browser or settings.browser if browser == "docker": _docker_browser = DockerBrowser() _docker_browser.start() _browser = _docker_browser.webdriver elif browser == "selenium": _browser = selenium_browser() else: raise NotImplementedError("this shell only supports docker and selenium") _browser.maximize_window() _browser.get(settings.server.get_url()) return _browser
def _get_browser(browser=None): """Gets a new instance of a browser to interact""" browser = browser or settings.browser if browser == 'docker': _docker_browser = DockerBrowser() _docker_browser.start() _browser = _docker_browser.webdriver elif browser == "selenium": _browser = selenium_browser() else: raise NotImplementedError( "this shell only supports docker and selenium") _browser.maximize_window() _browser.get(settings.server.get_url()) return _browser
def setUp(self): # noqa """We do want a new browser instance for every test.""" if settings.browser == 'docker': self._docker_browser = DockerBrowser() self._docker_browser.start() self.browser = self._docker_browser.webdriver else: self.browser = browser() self.browser.maximize_window() self.browser.get(settings.server.get_url()) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.content_search = ContentSearch(self.browser) self.domain = Domain(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.navigator = Navigator(self.browser) self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.systemgroup = SystemGroup(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.user = User(self.browser) self.usergroup = UserGroup(self.browser)
def setUp(self): # noqa """We do want a new browser instance for every test.""" if settings.browser == 'docker': self._docker_browser = DockerBrowser() self._docker_browser.start() self.browser = self._docker_browser.webdriver self.addCleanup(self._docker_browser.stop) else: self.browser = browser() self.addCleanup(self.browser.quit) self.browser.maximize_window() self.browser.get(settings.server.get_url()) self.addCleanup(self._saucelabs_test_result) self.addCleanup(self.take_screenshot) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.content_search = ContentSearch(self.browser) self.domain = Domain(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.navigator = Navigator(self.browser) self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.systemgroup = SystemGroup(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.user = User(self.browser) self.usergroup = UserGroup(self.browser)
class UITestCase(TestCase): """Test case for UI tests.""" @classmethod def setUpClass(cls): # noqa """Make sure that we only read configuration values once.""" super(UITestCase, cls).setUpClass() cls.katello_user = settings.server.admin_username cls.katello_passwd = settings.server.admin_password cls.driver_name = settings.webdriver cls.driver_binary = settings.webdriver_binary cls.locale = settings.locale cls.server_name = settings.server.hostname def setUp(self): # noqa """We do want a new browser instance for every test.""" if settings.browser == 'docker': self._docker_browser = DockerBrowser() self._docker_browser.start() self.browser = self._docker_browser.webdriver self.addCleanup(self._docker_browser.stop) else: self.browser = browser() self.addCleanup(self.browser.quit) self.browser.maximize_window() self.browser.get(settings.server.get_url()) self.addCleanup(self._saucelabs_test_result) self.addCleanup(self.take_screenshot) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.content_search = ContentSearch(self.browser) self.domain = Domain(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.navigator = Navigator(self.browser) self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.systemgroup = SystemGroup(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.user = User(self.browser) self.usergroup = UserGroup(self.browser) def take_screenshot(self): """Take screen shot from the current browser window. The screenshot named ``screenshot-YYYY-mm-dd_HH_MM_SS.png`` will be placed on the path specified by ``settings.screenshots_path/YYYY-mm-dd/ClassName/method_name/``. All directories will be created if they don't exist. Make sure that the user running robottelo have the right permissions to create files and directories matching the complete. """ if (len(self._outcome.errors) > 0 and self in self._outcome.errors[-1]): # Take screenshot if any exception is raised and the test method is # not in the skipped tests. now = datetime.now() path = os.path.join( settings.screenshots_path, now.strftime('%Y-%m-%d'), type(self).__name__, self._testMethodName, ) if not os.path.exists(path): os.makedirs(path) filename = 'screenshot-{0}.png'.format( now.strftime('%Y-%m-%d_%H_%M_%S')) path = os.path.join(path, filename) LOGGER.debug('Saving screenshot %s', path) self.browser.save_screenshot(path) def _saucelabs_test_result(self): """SauceLabs has no way to determine whether test passed or failed automatically, so we explicitly 'tell' it """ if settings.browser == 'saucelabs' and sauceclient: sc = sauceclient.SauceClient(settings.saucelabs_user, settings.saucelabs_key) passed = True status = 'passed' if (len(self._outcome.errors) > 0 and self in self._outcome.errors[-1]): passed = False status = 'failed' if (len(self._outcome.skipped) > 0 and self in self._outcome.skipped[-1]): passed = None status = 'complete' LOGGER.debug( 'Updating SauceLabs job "%s": name "%s" and status "%s"', self.browser.session_id, str(self), status) sc.jobs.update_job(self.browser.session_id, name=str(self), passed=passed)
class UITestCase(TestCase): """Test case for UI tests.""" @classmethod def setUpClass(cls): # noqa """Make sure that we only read configuration values once.""" super(UITestCase, cls).setUpClass() cls.katello_user = settings.server.admin_username cls.katello_passwd = settings.server.admin_password cls.driver_name = settings.webdriver cls.driver_binary = settings.webdriver_binary cls.locale = settings.locale cls.server_name = settings.server.hostname def setUp(self): # noqa """We do want a new browser instance for every test.""" if settings.browser == 'docker': self._docker_browser = DockerBrowser() self._docker_browser.start() self.browser = self._docker_browser.webdriver else: self.browser = browser() self.browser.maximize_window() self.browser.get(settings.server.get_url()) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.content_search = ContentSearch(self.browser) self.domain = Domain(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.navigator = Navigator(self.browser) self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.systemgroup = SystemGroup(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.user = User(self.browser) self.usergroup = UserGroup(self.browser) def take_screenshot(self): """Take screen shot from the current browser window. The screenshot named ``screenshot-YYYY-mm-dd_HH_MM_SS.png`` will be placed on the path specified by ``settings.screenshots_path/YYYY-mm-dd/ClassName/method_name/``. All directories will be created if they don't exist. Make sure that the user running robottelo have the right permissions to create files and directories matching the complete. """ now = datetime.now() path = os.path.join( settings.screenshots_path, now.strftime('%Y-%m-%d'), type(self).__name__, self._testMethodName, ) if not os.path.exists(path): os.makedirs(path) filename = 'screenshot-{0}.png'.format( now.strftime('%Y-%m-%d_%H_%M_%S') ) self.browser.save_screenshot(os.path.join(path, filename)) def tearDown(self): # noqa """Make sure to close the browser after each test.""" skipped = False # SauceLabs has no way to determine whether test passed or failed # automatically, so we explicitly 'tell' it if settings.browser == 'saucelabs' and sauceclient: sc = sauceclient.SauceClient( settings.saucelabs_user, settings.saucelabs_key) result = self.defaultTestResult() passed = not (result.failures or result.errors) if isinstance(self.browser, remote.webdriver.WebDriver): sc.jobs.update_job( self.browser.session_id, name=str(self), passed=passed) if len(self._outcome.skipped) > 0: skipped = self in self._outcome.skipped[-1] if sys.exc_info()[0] is not None and not skipped: # Take screenshot if any exception is raised and the test method is # not in the skipped tests. self.take_screenshot() if settings.browser == 'docker': self._docker_browser.stop() else: self.browser.quit() self.browser = None
def setUp(self): # noqa """We do want a new browser instance for every test.""" super(UITestCase, self).setUp() if settings.browser == 'docker': self._docker_browser = DockerBrowser(name=self.id()) self._docker_browser.start() self.browser = self._docker_browser.webdriver self.addCleanup(self._docker_browser.stop) else: self.browser = browser() self.addCleanup(self.browser.quit) self.browser.maximize_window() self.browser.get(settings.server.get_url()) # Workaround 'Certificate Error' screen on Microsoft Edge if (self.driver_name == 'edge' and 'Certificate Error' in self.browser.title or 'Login' not in self.browser.title): self.browser.get( "javascript:document.getElementById('invalidcert_continue')" ".click()" ) self.browser.foreman_user = self.foreman_user self.browser.foreman_password = self.foreman_password self.addCleanup(self._saucelabs_test_result) self.addCleanup(self.take_screenshot) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.contenthost = ContentHost(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.dashboard = Dashboard(self.browser) self.dockertag = DockerTag(self.browser) self.domain = Domain(self.browser) self.errata = Errata(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.job = Job(self.browser) self.jobtemplate = JobTemplate(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.my_account = MyAccount(self.browser) self.navigator = Navigator(self.browser) self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.package = Package(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.puppetmodule = PuppetModule(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.sc_parameters = SmartClassParameter(self.browser) self.smart_variable = SmartVariable(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.systemgroup = SystemGroup(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.user = User(self.browser) self.usergroup = UserGroup(self.browser)
class UITestCase(TestCase): """Test case for UI tests.""" @classmethod def setUpClass(cls): # noqa """Make sure that we only read configuration values once.""" super(UITestCase, cls).setUpClass() cls.set_session_org() cls.set_session_user() if cls.session_user is not None: cls.foreman_user = cls.session_user.login cls.driver_name = settings.webdriver cls.driver_binary = settings.webdriver_binary cls.locale = settings.locale cls.server_name = settings.server.hostname cls.logger.info( u'Session set with:\n' u'\tUser: {cls.session_user.id}:{cls.session_user.login}\n' u'\tOrganization: {cls.session_org.id}:{cls.session_org.name}\n' u'\tWeb Driver: {cls.driver_name}\n' u'\tBinary: {cls.driver_binary}\n' u'\tLocale: {cls.locale}\n' u'\tServer Name: {cls.server_name}' .format(cls=cls) ) @classmethod def set_session_org(cls): """TestCases can overwrite this method to create a different organization object for the session. """ cls.session_org = entities.Organization( id=DEFAULT_ORG_ID, name=DEFAULT_ORG ) @classmethod def set_session_user(cls): """Creates a new user for each session this method can be overwritten in TestCases in order to get different default user """ try: username = gen_string('alpha') cls.session_user = entities.User( firstname='Robottelo User {0}'.format(username), login=username, password=cls.foreman_password, admin=True, default_organization=cls.session_org ).create() except Exception as e: cls.session_user = None cls.logger.warn('Unable to create session_user: %s', str(e)) @classmethod def tearDownClass(cls): super(UITestCase, cls).tearDownClass() cls.delete_session_user() @classmethod def delete_session_user(cls): """Delete created session user can be overwritten in TestCase to bypass user deletion """ if cls.session_user is not None: try: cls.session_user.delete(synchronous=False) except Exception as e: cls.logger.warn('Unable to delete session_user: %s', str(e)) else: cls.logger.info( 'Session user is being deleted: %s', cls.session_user) def setUp(self): # noqa """We do want a new browser instance for every test.""" super(UITestCase, self).setUp() if settings.browser == 'docker': self._docker_browser = DockerBrowser(name=self.id()) self._docker_browser.start() self.browser = self._docker_browser.webdriver self.addCleanup(self._docker_browser.stop) else: self.browser = browser() self.addCleanup(self.browser.quit) self.browser.maximize_window() self.browser.get(settings.server.get_url()) # Workaround 'Certificate Error' screen on Microsoft Edge if (self.driver_name == 'edge' and 'Certificate Error' in self.browser.title or 'Login' not in self.browser.title): self.browser.get( "javascript:document.getElementById('invalidcert_continue')" ".click()" ) self.browser.foreman_user = self.foreman_user self.browser.foreman_password = self.foreman_password self.addCleanup(self._saucelabs_test_result) self.addCleanup(self.take_screenshot) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.contenthost = ContentHost(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.dashboard = Dashboard(self.browser) self.dockertag = DockerTag(self.browser) self.domain = Domain(self.browser) self.errata = Errata(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.job = Job(self.browser) self.jobtemplate = JobTemplate(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.my_account = MyAccount(self.browser) self.navigator = Navigator(self.browser) self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.package = Package(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.puppetmodule = PuppetModule(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.sc_parameters = SmartClassParameter(self.browser) self.smart_variable = SmartVariable(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.systemgroup = SystemGroup(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.user = User(self.browser) self.usergroup = UserGroup(self.browser) def take_screenshot(self): """Take screen shot from the current browser window. The screenshot named ``screenshot-YYYY-mm-dd_HH_MM_SS.png`` will be placed on the path specified by ``settings.screenshots_path/YYYY-mm-dd/ClassName/method_name/``. All directories will be created if they don't exist. Make sure that the user running robottelo have the right permissions to create files and directories matching the complete. """ if (len(self._outcome.errors) > 0 and self in self._outcome.errors[-1]): # Take screenshot if any exception is raised and the test method is # not in the skipped tests. now = datetime.now() path = os.path.join( settings.screenshots_path, now.strftime('%Y-%m-%d'), ) if not os.path.exists(path): os.makedirs(path) filename = '{0}-{1}-screenshot-{2}.png'.format( type(self).__name__, self._testMethodName, now.strftime('%Y-%m-%d_%H_%M_%S') ) path = os.path.join(path, filename) LOGGER.debug('Saving screenshot %s', path) self.browser.save_screenshot(path) def _saucelabs_test_result(self): """SauceLabs has no way to determine whether test passed or failed automatically, so we explicitly 'tell' it """ if settings.browser == 'saucelabs' and sauceclient: sc = sauceclient.SauceClient( settings.saucelabs_user, settings.saucelabs_key) passed = True status = 'passed' if (len(self._outcome.errors) > 0 and self in self._outcome.errors[-1]): passed = False status = 'failed' if (len(self._outcome.skipped) > 0 and self in self._outcome.skipped[-1]): passed = None status = 'complete' LOGGER.debug( 'Updating SauceLabs job "%s": name "%s" and status "%s"', self.browser.session_id, str(self), status ) sc.jobs.update_job( self.browser.session_id, name=str(self), passed=passed)
def __enter__(self): if settings.browser == 'docker': self._docker_browser = DockerBrowser(name=self.test.id()) self._docker_browser.start() self.browser = self._docker_browser.webdriver else: self.browser = browser() # for compatibility purposes self.test.browser = self.browser self.browser.foreman_user = self.test.foreman_user self.browser.foreman_password = self.test.foreman_password if self._user is None: self._user = getattr(self.browser, 'foreman_user', settings.server.admin_username) if self._password is None: self._password = getattr(self.browser, 'foreman_password', settings.server.admin_password) self.browser.maximize_window() self.browser.get(settings.server.get_url()) # Workaround 'Certificate Error' screen on Microsoft Edge if (self.test.driver_name == 'edge' and 'Certificate Error' in self.browser.title or 'Login' not in self.browser.title): self.browser.get( "javascript:document.getElementById('invalidcert_continue')" ".click()") self.test.addCleanup(self.test._saucelabs_test_result, self.browser.session_id) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.contenthost = ContentHost(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.dashboard = Dashboard(self.browser) self.dockertag = DockerTag(self.browser) self.domain = Domain(self.browser) self.errata = Errata(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.job = Job(self.browser) self.jobtemplate = JobTemplate(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.my_account = MyAccount(self.browser) self.navigator = Navigator(self.browser) self.nav = self.navigator # for compatibility purposes self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.package = Package(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.puppetmodule = PuppetModule(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.sc_parameters = SmartClassParameter(self.browser) self.smart_variable = SmartVariable(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.task = Task(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.usergroup = UserGroup(self.browser) # for compatibility purposes for attr in ('activationkey', 'architecture', 'bookmark', 'container', 'compute_profile', 'compute_resource', 'contenthost', 'configgroups', 'content_views', 'dashboard', 'dockertag', 'domain', 'errata', 'discoveredhosts', 'discoveryrules', 'environment', 'gpgkey', 'hardwaremodel', 'hostcollection', 'hostgroup', 'hosts', 'job', 'jobtemplate', 'ldapauthsource', 'lifecycleenvironment', 'location', 'login', 'medium', 'my_account', 'navigator', 'nav', 'user', 'operatingsys', 'org', 'oscapcontent', 'oscappolicy', 'oscapreports', 'package', 'partitiontable', 'puppetclasses', 'puppetmodule', 'products', 'registry', 'repository', 'rhai', 'role', 'settings', 'sc_parameters', 'smart_variable', 'subnet', 'subscriptions', 'sync', 'syncplan', 'task', 'template', 'trend', 'usergroup'): setattr(self.test, attr, getattr(self, attr)) self.login.login(self._user, self._password) return self
class Session(object): """A session context manager that manages login and logout""" def __init__(self, test, user=None, password=None): self.test = test self._password = password self._user = user def __enter__(self): if settings.browser == 'docker': self._docker_browser = DockerBrowser(name=self.test.id()) self._docker_browser.start() self.browser = self._docker_browser.webdriver else: self.browser = browser() # for compatibility purposes self.test.browser = self.browser self.browser.foreman_user = self.test.foreman_user self.browser.foreman_password = self.test.foreman_password if self._user is None: self._user = getattr(self.browser, 'foreman_user', settings.server.admin_username) if self._password is None: self._password = getattr(self.browser, 'foreman_password', settings.server.admin_password) self.browser.maximize_window() self.browser.get(settings.server.get_url()) # Workaround 'Certificate Error' screen on Microsoft Edge if (self.test.driver_name == 'edge' and 'Certificate Error' in self.browser.title or 'Login' not in self.browser.title): self.browser.get( "javascript:document.getElementById('invalidcert_continue')" ".click()") self.test.addCleanup(self.test._saucelabs_test_result, self.browser.session_id) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.contenthost = ContentHost(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.dashboard = Dashboard(self.browser) self.dockertag = DockerTag(self.browser) self.domain = Domain(self.browser) self.errata = Errata(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.job = Job(self.browser) self.jobtemplate = JobTemplate(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.my_account = MyAccount(self.browser) self.navigator = Navigator(self.browser) self.nav = self.navigator # for compatibility purposes self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.package = Package(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.puppetmodule = PuppetModule(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.sc_parameters = SmartClassParameter(self.browser) self.smart_variable = SmartVariable(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.task = Task(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.usergroup = UserGroup(self.browser) # for compatibility purposes for attr in ('activationkey', 'architecture', 'bookmark', 'container', 'compute_profile', 'compute_resource', 'contenthost', 'configgroups', 'content_views', 'dashboard', 'dockertag', 'domain', 'errata', 'discoveredhosts', 'discoveryrules', 'environment', 'gpgkey', 'hardwaremodel', 'hostcollection', 'hostgroup', 'hosts', 'job', 'jobtemplate', 'ldapauthsource', 'lifecycleenvironment', 'location', 'login', 'medium', 'my_account', 'navigator', 'nav', 'user', 'operatingsys', 'org', 'oscapcontent', 'oscappolicy', 'oscapreports', 'package', 'partitiontable', 'puppetclasses', 'puppetmodule', 'products', 'registry', 'repository', 'rhai', 'role', 'settings', 'sc_parameters', 'smart_variable', 'subnet', 'subscriptions', 'sync', 'syncplan', 'task', 'template', 'trend', 'usergroup'): setattr(self.test, attr, getattr(self, attr)) self.login.login(self._user, self._password) return self def __exit__(self, exc_type, exc_value, traceback): try: if exc_type is None: self.login.logout() else: self.take_screenshot() except Exception as err: LOGGER.exception(err) finally: if settings.browser == 'docker': self._docker_browser.stop() else: self.browser.quit() def take_screenshot(self): """Take screen shot from the current browser window. The screenshot named ``screenshot-YYYY-mm-dd_HH_MM_SS.png`` will be placed on the path specified by ``settings.screenshots_path/YYYY-mm-dd/ClassName/method_name/``. All directories will be created if they don't exist. Make sure that the user running robottelo have the right permissions to create files and directories matching the complete. """ # Take a screenshot if any exception is raised and the test method is # not in the skipped tests. now = datetime.now() path = os.path.join( settings.screenshots_path, now.strftime('%Y-%m-%d'), ) if not os.path.exists(path): os.makedirs(path) filename = '{0}-{1}-screenshot-{2}.png'.format( type(self.test).__name__, self.test._testMethodName, now.strftime('%Y-%m-%d_%H_%M_%S')) path = os.path.join(path, filename) LOGGER.debug('Saving screenshot %s', path) self.browser.save_screenshot(path) def get_org_name(self): """ Make a Organization and cache its name to be returned through session, avoiding overhead of its recreation on each test. Organization Must be at same state (not mutate) at the end of the test Create your own organization if mutation is needed. Otherwise other tests can break with your tests side effects :return: str: Organization name """ if 'org_name' in _org_cache: return _org_cache['org_name'] org_name = gen_string('alpha') make_org(self, org_name=org_name) _org_cache['org_name'] = org_name return org_name
class UITestCase(TestCase): """Test case for UI tests.""" @classmethod def setUpClass(cls): # noqa """Make sure that we only read configuration values once.""" super(UITestCase, cls).setUpClass() cls.set_session_org() cls.set_session_user() if cls.session_user is not None: cls.foreman_user = cls.session_user.login cls.driver_name = settings.webdriver cls.driver_binary = settings.webdriver_binary cls.locale = settings.locale cls.server_name = settings.server.hostname cls.logger.info( u'Session set with:\n' u'\tUser: {cls.session_user.id}:{cls.session_user.login}\n' u'\tOrganization: {cls.session_org.id}:{cls.session_org.name}\n' u'\tWeb Driver: {cls.driver_name}\n' u'\tBinary: {cls.driver_binary}\n' u'\tLocale: {cls.locale}\n' u'\tServer Name: {cls.server_name}'.format(cls=cls)) @classmethod def set_session_org(cls): """TestCases can overwrite this method to create a different organization object for the session. """ cls.session_org = entities.Organization(id=DEFAULT_ORG_ID, name=DEFAULT_ORG) @classmethod def set_session_user(cls): """Creates a new user for each session this method can be overwritten in TestCases in order to get different default user """ try: username = gen_string('alpha') cls.session_user = entities.User( firstname='Robottelo User {0}'.format(username), login=username, password=cls.foreman_password, admin=True, default_organization=cls.session_org).create() except Exception as e: cls.session_user = None cls.logger.warn('Unable to create session_user: %s', str(e)) @classmethod def tearDownClass(cls): super(UITestCase, cls).tearDownClass() cls.delete_session_user() @classmethod def delete_session_user(cls): """Delete created session user can be overwritten in TestCase to bypass user deletion """ if cls.session_user is not None: try: cls.session_user.delete(synchronous=False) except Exception as e: cls.logger.warn('Unable to delete session_user: %s', str(e)) else: cls.logger.info('Session user is being deleted: %s', cls.session_user) def setUp(self): # noqa """We do want a new browser instance for every test.""" super(UITestCase, self).setUp() if settings.browser == 'docker': self._docker_browser = DockerBrowser() self._docker_browser.start() self.browser = self._docker_browser.webdriver self.addCleanup(self._docker_browser.stop) else: self.browser = browser() self.addCleanup(self.browser.quit) self.browser.maximize_window() self.browser.get(settings.server.get_url()) self.browser.foreman_user = self.foreman_user self.browser.foreman_password = self.foreman_password self.addCleanup(self._saucelabs_test_result) self.addCleanup(self.take_screenshot) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.contenthost = ContentHost(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.dockertag = DockerTag(self.browser) self.domain = Domain(self.browser) self.errata = Errata(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.job = Job(self.browser) self.jobtemplate = JobTemplate(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.navigator = Navigator(self.browser) self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.package = Package(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.smart_variable = SmartVariable(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.systemgroup = SystemGroup(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.user = User(self.browser) self.usergroup = UserGroup(self.browser) def take_screenshot(self): """Take screen shot from the current browser window. The screenshot named ``screenshot-YYYY-mm-dd_HH_MM_SS.png`` will be placed on the path specified by ``settings.screenshots_path/YYYY-mm-dd/ClassName/method_name/``. All directories will be created if they don't exist. Make sure that the user running robottelo have the right permissions to create files and directories matching the complete. """ if (len(self._outcome.errors) > 0 and self in self._outcome.errors[-1]): # Take screenshot if any exception is raised and the test method is # not in the skipped tests. now = datetime.now() path = os.path.join( settings.screenshots_path, now.strftime('%Y-%m-%d'), ) if not os.path.exists(path): os.makedirs(path) filename = '{0}-{1}-screenshot-{2}.png'.format( type(self).__name__, self._testMethodName, now.strftime('%Y-%m-%d_%H_%M_%S')) path = os.path.join(path, filename) LOGGER.debug('Saving screenshot %s', path) self.browser.save_screenshot(path) def _saucelabs_test_result(self): """SauceLabs has no way to determine whether test passed or failed automatically, so we explicitly 'tell' it """ if settings.browser == 'saucelabs' and sauceclient: sc = sauceclient.SauceClient(settings.saucelabs_user, settings.saucelabs_key) passed = True status = 'passed' if (len(self._outcome.errors) > 0 and self in self._outcome.errors[-1]): passed = False status = 'failed' if (len(self._outcome.skipped) > 0 and self in self._outcome.skipped[-1]): passed = None status = 'complete' LOGGER.debug( 'Updating SauceLabs job "%s": name "%s" and status "%s"', self.browser.session_id, str(self), status) sc.jobs.update_job(self.browser.session_id, name=str(self), passed=passed)
def __enter__(self): if settings.browser == 'docker': self._docker_browser = DockerBrowser(name=self.test.id()) self._docker_browser.start() self.browser = self._docker_browser.webdriver else: self.browser = browser() # for compatibility purposes self.test.browser = self.browser self.browser.foreman_user = self.test.foreman_user self.browser.foreman_password = self.test.foreman_password if self._user is None: self._user = getattr( self.browser, 'foreman_user', settings.server.admin_username ) if self._password is None: self._password = getattr( self.browser, 'foreman_password', settings.server.admin_password ) self.browser.maximize_window() self.browser.get(settings.server.get_url()) # Workaround 'Certificate Error' screen on Microsoft Edge if (self.test.driver_name == 'edge' and 'Certificate Error' in self.browser.title or 'Login' not in self.browser.title): self.browser.get( "javascript:document.getElementById('invalidcert_continue')" ".click()" ) self.test.addCleanup( self.test._saucelabs_test_result, self.browser.session_id) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.audit = Audit(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.contenthost = ContentHost(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.dashboard = Dashboard(self.browser) self.dockertag = DockerTag(self.browser) self.domain = Domain(self.browser) self.errata = Errata(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.globalparameters = GlobalParameters(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.job = Job(self.browser) self.jobtemplate = JobTemplate(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.my_account = MyAccount(self.browser) self.navigator = Navigator(self.browser) self.nav = self.navigator # for compatibility purposes self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.oscaptailoringfile = OpenScapTailoringfile(self.browser) self.package = Package(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.puppetmodule = PuppetModule(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.sc_parameters = SmartClassParameter(self.browser) self.smart_variable = SmartVariable(self.browser) self.statistic = Statistic(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.task = Task(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.usergroup = UserGroup(self.browser) # for compatibility purposes for attr in ( 'activationkey', 'architecture', 'audit', 'bookmark', 'container', 'compute_profile', 'compute_resource', 'contenthost', 'configgroups', 'content_views', 'dashboard', 'dockertag', 'domain', 'errata', 'discoveredhosts', 'discoveryrules', 'environment', 'gpgkey', 'hardwaremodel', 'hostcollection', 'hostgroup', 'hosts', 'job', 'jobtemplate', 'ldapauthsource', 'lifecycleenvironment', 'location', 'login', 'medium', 'my_account', 'navigator', 'nav', 'user', 'operatingsys', 'org', 'oscapcontent', 'oscappolicy', 'oscapreports', 'oscaptailoringfile', 'package', 'partitiontable', 'puppetclasses', 'puppetmodule', 'products', 'registry', 'repository', 'rhai', 'role', 'settings', 'sc_parameters', 'smart_variable', 'statistic', 'subnet', 'subscriptions', 'sync', 'syncplan', 'task', 'template', 'trend', 'usergroup', 'globalparameters'): setattr(self.test, attr, getattr(self, attr)) self.login.login(self._user, self._password) return self
class Session(object): """A session context manager that manages login and logout""" def __init__(self, test, user=None, password=None): self.test = test self._password = password self._user = user def __enter__(self): if settings.browser == 'docker': self._docker_browser = DockerBrowser(name=self.test.id()) self._docker_browser.start() self.browser = self._docker_browser.webdriver else: self.browser = browser() # for compatibility purposes self.test.browser = self.browser self.browser.foreman_user = self.test.foreman_user self.browser.foreman_password = self.test.foreman_password if self._user is None: self._user = getattr( self.browser, 'foreman_user', settings.server.admin_username ) if self._password is None: self._password = getattr( self.browser, 'foreman_password', settings.server.admin_password ) self.browser.maximize_window() self.browser.get(settings.server.get_url()) # Workaround 'Certificate Error' screen on Microsoft Edge if (self.test.driver_name == 'edge' and 'Certificate Error' in self.browser.title or 'Login' not in self.browser.title): self.browser.get( "javascript:document.getElementById('invalidcert_continue')" ".click()" ) self.test.addCleanup( self.test._saucelabs_test_result, self.browser.session_id) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.audit = Audit(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.contenthost = ContentHost(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.dashboard = Dashboard(self.browser) self.dockertag = DockerTag(self.browser) self.domain = Domain(self.browser) self.errata = Errata(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.globalparameters = GlobalParameters(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.job = Job(self.browser) self.jobtemplate = JobTemplate(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.my_account = MyAccount(self.browser) self.navigator = Navigator(self.browser) self.nav = self.navigator # for compatibility purposes self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.oscaptailoringfile = OpenScapTailoringfile(self.browser) self.package = Package(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.puppetmodule = PuppetModule(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.sc_parameters = SmartClassParameter(self.browser) self.smart_variable = SmartVariable(self.browser) self.statistic = Statistic(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.task = Task(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.usergroup = UserGroup(self.browser) # for compatibility purposes for attr in ( 'activationkey', 'architecture', 'audit', 'bookmark', 'container', 'compute_profile', 'compute_resource', 'contenthost', 'configgroups', 'content_views', 'dashboard', 'dockertag', 'domain', 'errata', 'discoveredhosts', 'discoveryrules', 'environment', 'gpgkey', 'hardwaremodel', 'hostcollection', 'hostgroup', 'hosts', 'job', 'jobtemplate', 'ldapauthsource', 'lifecycleenvironment', 'location', 'login', 'medium', 'my_account', 'navigator', 'nav', 'user', 'operatingsys', 'org', 'oscapcontent', 'oscappolicy', 'oscapreports', 'oscaptailoringfile', 'package', 'partitiontable', 'puppetclasses', 'puppetmodule', 'products', 'registry', 'repository', 'rhai', 'role', 'settings', 'sc_parameters', 'smart_variable', 'statistic', 'subnet', 'subscriptions', 'sync', 'syncplan', 'task', 'template', 'trend', 'usergroup', 'globalparameters'): setattr(self.test, attr, getattr(self, attr)) self.login.login(self._user, self._password) return self def __exit__(self, exc_type, exc_value, traceback): try: if exc_type is None: self.login.logout() else: self.take_screenshot() except Exception as err: LOGGER.exception(err) finally: if settings.browser == 'docker': self._docker_browser.stop() else: self.browser.quit() def take_screenshot(self): """Take screen shot from the current browser window. The screenshot named ``screenshot-YYYY-mm-dd_HH_MM_SS.png`` will be placed on the path specified by ``settings.screenshots_path/YYYY-mm-dd/ClassName/method_name/``. All directories will be created if they don't exist. Make sure that the user running robottelo have the right permissions to create files and directories matching the complete. """ # Take a screenshot if any exception is raised and the test method is # not in the skipped tests. now = datetime.now() path = os.path.join( settings.screenshots_path, now.strftime('%Y-%m-%d'), ) if not os.path.exists(path): os.makedirs(path) filename = '{0}-{1}-screenshot-{2}.png'.format( type(self.test).__name__, self.test._testMethodName, now.strftime('%Y-%m-%d_%H_%M_%S') ) path = os.path.join(path, filename) LOGGER.debug('Saving screenshot %s', path) self.browser.save_screenshot(path) def get_org_name(self): """ Make a Organization and cache its name to be returned through session, avoiding overhead of its recreation on each test. Organization Must be at same state (not mutate) at the end of the test Create your own organization if mutation is needed. Otherwise other tests can break with your tests side effects :return: str: Organization name """ if 'org_name' in _org_cache: return _org_cache['org_name'] org_name = gen_string('alpha') make_org(self, org_name=org_name) _org_cache['org_name'] = org_name return org_name
def setUp(self): # noqa """We do want a new browser instance for every test.""" super(UITestCase, self).setUp() if settings.browser == 'docker': self._docker_browser = DockerBrowser(name=self.id()) self._docker_browser.start() self.browser = self._docker_browser.webdriver self.addCleanup(self._docker_browser.stop) else: self.browser = browser() self.addCleanup(self.browser.quit) self.browser.maximize_window() self.browser.get(settings.server.get_url()) # Workaround 'Certificate Error' screen on Microsoft Edge if (self.driver_name == 'edge' and 'Certificate Error' in self.browser.title or 'Login' not in self.browser.title): self.browser.get( "javascript:document.getElementById('invalidcert_continue')" ".click()") self.browser.foreman_user = self.foreman_user self.browser.foreman_password = self.foreman_password self.addCleanup(self._saucelabs_test_result) self.addCleanup(self.take_screenshot) # Library methods self.activationkey = ActivationKey(self.browser) self.architecture = Architecture(self.browser) self.bookmark = Bookmark(self.browser) self.container = Container(self.browser) self.compute_profile = ComputeProfile(self.browser) self.compute_resource = ComputeResource(self.browser) self.contenthost = ContentHost(self.browser) self.configgroups = ConfigGroups(self.browser) self.content_views = ContentViews(self.browser) self.dashboard = Dashboard(self.browser) self.dockertag = DockerTag(self.browser) self.domain = Domain(self.browser) self.errata = Errata(self.browser) self.discoveredhosts = DiscoveredHosts(self.browser) self.discoveryrules = DiscoveryRules(self.browser) self.environment = Environment(self.browser) self.gpgkey = GPGKey(self.browser) self.hardwaremodel = HardwareModel(self.browser) self.hostcollection = HostCollection(self.browser) self.hostgroup = Hostgroup(self.browser) self.hosts = Hosts(self.browser) self.job = Job(self.browser) self.jobtemplate = JobTemplate(self.browser) self.ldapauthsource = LdapAuthSource(self.browser) self.lifecycleenvironment = LifecycleEnvironment(self.browser) self.location = Location(self.browser) self.login = Login(self.browser) self.medium = Medium(self.browser) self.my_account = MyAccount(self.browser) self.navigator = Navigator(self.browser) self.user = User(self.browser) self.operatingsys = OperatingSys(self.browser) self.org = Org(self.browser) self.oscapcontent = OpenScapContent(self.browser) self.oscappolicy = OpenScapPolicy(self.browser) self.oscapreports = OpenScapReports(self.browser) self.package = Package(self.browser) self.partitiontable = PartitionTable(self.browser) self.puppetclasses = PuppetClasses(self.browser) self.puppetmodule = PuppetModule(self.browser) self.products = Products(self.browser) self.registry = Registry(self.browser) self.repository = Repos(self.browser) self.rhai = RHAI(self.browser) self.role = Role(self.browser) self.settings = Settings(self.browser) self.smart_variable = SmartVariable(self.browser) self.subnet = Subnet(self.browser) self.subscriptions = Subscriptions(self.browser) self.sync = Sync(self.browser) self.syncplan = Syncplan(self.browser) self.systemgroup = SystemGroup(self.browser) self.template = Template(self.browser) self.trend = Trend(self.browser) self.user = User(self.browser) self.usergroup = UserGroup(self.browser)