Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
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)
Exemple #6
0
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
Exemple #7
0
    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)
Exemple #8
0
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)
Exemple #9
0
    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
Exemple #10
0
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
Exemple #11
0
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)
Exemple #12
0
    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
Exemple #13
0
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
Exemple #14
0
    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)