Ejemplo n.º 1
0
    class MyView(View):
        the_reference = Select(id='ewaopaopsdkgnjdsopjf')

        the_switchable_view = ConditionalSwitchableView(
            reference='the_reference', ignore_bad_reference=True)

        @the_switchable_view.register('foo')
        class FooView(View):
            widget = Text('//h3[@id="switchabletesting-1"]')

        @the_switchable_view.register('bar', default=True)
        class BarView(View):
            widget = Text('//h3[@id="switchabletesting-2"]')
Ejemplo n.º 2
0
    class MyView(View):
        the_reference = 'bar'

        the_switchable_view = ConditionalSwitchableView(
            reference='the_reference')

        @the_switchable_view.register('foo')
        class FooView(View):
            widget = Text('//h3[@id="switchabletesting-1"]')

        @the_switchable_view.register('bar')
        class BarView(View):
            widget = Text('//h3[@id="switchabletesting-2"]')
Ejemplo n.º 3
0
    class DockerRepository(View):
        registry_url = EditableEntry(name='Registry URL')
        upstream_repo_name = EditableEntry(name='Upstream Repository')
        repo_name = ReadOnlyEntry(name='Name')
        verify_ssl = EditableEntryCheckbox(name='Verify SSL')
        upstream_authorization = AuthorizationEntry(
            name='Upstream Authorization')
        publish_via_http = EditableEntryCheckbox(name='Publish via HTTP')
        http_proxy_policy = EditableEntrySelect(name='HTTP Proxy')
        proxy_policy = ConditionalSwitchableView(reference='http_proxy_policy')

        @proxy_policy.register(True, default=True)
        class NoSpecificHttpProxy(View):
            pass
Ejemplo n.º 4
0
    class MyView(View):
        the_reference = Select(id='switchabletesting-select')

        the_switchable_view = ConditionalSwitchableView()

        @the_switchable_view.register(
            lambda the_reference: the_reference == 'foo')
        class FooView(View):
            widget = Text('//h3[@id="switchabletesting-1"]')

        @the_switchable_view.register(
            lambda the_reference: the_reference == 'bar')
        class BarView(View):
            widget = Text('//h3[@id="switchabletesting-2"]')
Ejemplo n.º 5
0
class HostInfraUtilizationView(View):
    """View for Infrastructure provider Host Utilization"""
    title = Text(".//div[@id='main-content']//h1")
    options = View.nested(OptionForm)
    interval_type = ConditionalSwitchableView(reference='options.interval')

    @interval_type.register('Daily', default=True)
    class HostInfraDailyUtilizationView(View):
        """A view for Daily Interval Host Utilization"""
        host_cpu = LineChart(id='miq_chart_parent_candu_0')
        host_cpu_vm_avg = LineChart(id='miq_chart_candu_0_2')
        host_cpu_state = LineChart(id='miq_chart_parent_candu_1')
        host_cpu_state_vm_avg = LineChart(id='miq_chart_candu_1_2')
        host_memory = LineChart(id='miq_chart_parent_candu_2')
        host_memory_vm_avg = LineChart(id='miq_chart_candu_2_2')
        host_disk = LineChart(id='miq_chart_parent_candu_3')
        host_disk_vm_avg = LineChart(id='miq_chart_candu_3_2')
        host_network = LineChart(id='miq_chart_parent_candu_4')
        host_network_vm_avg = LineChart(id='miq_chart_candu_4_2')
        host_vm = LineChart(id='miq_chart_parent_candu_5')

    @interval_type.register('Hourly')
    class HostInfraHourlyUtilizationView(View):
        """A view for Hourly Interval Host Utilization"""
        host_cpu = LineChart(id='miq_chart_parent_candu_0')
        host_cpu_vm_avg = LineChart(id='miq_chart_candu_0_2')
        host_cpu_state = LineChart(id='miq_chart_parent_candu_1')
        host_cpu_state_vm_avg = LineChart(id='miq_chart_candu_1_2')
        host_memory = LineChart(id='miq_chart_parent_candu_2')
        host_memory_vm_avg = LineChart(id='miq_chart_candu_2_2')
        host_disk = LineChart(id='miq_chart_parent_candu_3')
        host_disk_vm_avg = LineChart(id='miq_chart_candu_3_2')
        host_network = LineChart(id='miq_chart_parent_candu_4')
        host_network_vm_avg = LineChart(id='miq_chart_candu_4_2')
        host_vm = LineChart(id='miq_chart_parent_candu_5')

    @interval_type.register('Most Recent Hour')
    class HostInfraRecentHourUtilizationView(View):
        """A view for Most Recent Hour Interval Host Utilization"""
        host_cpu = LineChart(id='miq_chart_parent_candu_0')
        host_memory = LineChart(id='miq_chart_parent_candu_2')
        host_disk = LineChart(id='miq_chart_parent_candu_3')
        host_network = LineChart(id='miq_chart_parent_candu_4')

    @property
    def is_displayed(self):
        expected_title = "{} Capacity & Utilization".format(
            self.context['object'].name)
        return self.title.text == expected_title
Ejemplo n.º 6
0
class CredentialFormView(CredentialsBaseView):
    name = Input(name="name")
    credential_form = ConditionalSwitchableView(reference="credential_type")

    @credential_form.register("<Choose>", default=True)
    class CredentialFormDefaultView(View):
        pass

    @credential_form.register("Machine")
    class CredentialFormMachineView(View):
        username = Input(locator='.//input[@title="Username for this credential"]')
        password = Input(locator='.//input[@title="Password for this credential"][2]')
        private_key = TextInput(
            locator='.//textarea[@title="RSA or DSA private key to be used instead of password"][2]'
        )
        private_key_phrase = Input(
            locator='.//input[@title="Passphrase to unlock SSH private key if encrypted"][2]')
        privilage_escalation = BootstrapSelect("{{name}}")
        privilage_escalation_username = Input(
            locator='.//input[@title="Privilege escalation username"]')
        privilage_escalation_password = Input(
            locator='.//input[@title="Password for privilege escalation method"][2]')
        vault_password = Input(locator='.//input[@title="Vault password"][2]')

    @credential_form.register("Scm")
    class CredentialFormScmView(View):
        username = Input(locator='.//input[@title="Username for this credential"]')
        password = Input(locator='.//input[@title="Password for this credential"][2]')
        private_key = TextInput(
            locator='.//textarea[@title="RSA or DSA private key to be used instead of password"][2]'
        )
        private_key_phrase = Input(
            locator='.//input[@title="Passphrase to unlock SSH private key if encrypted"][2]')

    @credential_form.register("Amazon")
    class CredentialFormAmazonView(View):
        access_key = Input(locator='.//input[@title="AWS Access Key for this credential"]')
        secret_key = Input(locator='.//input[@title="AWS Secret Key for this credential"][2]')
        sts_token = Input(
            locator='.//input[@title="Security Token Service(STS) Token for this credential"][2]')

    @credential_form.register("VMware")
    class CredentialFormVMwareView(View):
        username = Input(locator='.//input[@title="Username for this credential"]')
        password = Input(locator='.//input[@title="Password for this credential"][2]')
        vcenter_host = Input(
            locator='.//input[@title="The hostname or IP address of the vCenter Host"]')

    cancel_button = Button("Cancel")
Ejemplo n.º 7
0
class ProductManageHttpProxy(BaseLoggedInView):
    """Represents Http Proxy Management page for Products."""
    title = Text("//h4[text()='Http Proxy Management']")
    http_proxy_policy = Select(id="http_proxy_policy")
    proxy_policy = ConditionalSwitchableView(reference='http_proxy_policy')
    update = Text('//button[@ng-click="update()"]')

    @proxy_policy.register('Use specific HTTP Proxy')
    class ExistingProductForm(View):
        http_proxy = Select(id="http_proxy")

    @property
    def is_displayed(self):
        return self.browser.wait_for_element(self.title,
                                             exception=False) is not None
Ejemplo n.º 8
0
    class schedule(SatTab):
        period = FilteredDropdown(id='s2id_policy_period')
        period_selection = ConditionalSwitchableView(reference='period')

        @period_selection.register('Weekly')
        class WeeklyPeriodForm(View):
            weekday = FilteredDropdown(id='s2id_policy_weekday')

        @period_selection.register('Monthly')
        class MonthlyPeriodForm(View):
            day_of_month = FilteredDropdown(id='s2id_policy_day_of_month')

        @period_selection.register('Custom')
        class CustomPeriodForm(View):
            cron_line = TextInput(id='policy_cron_line')
Ejemplo n.º 9
0
class AnalysisProfileAddView(BaseLoggedInPage):
    """View for the add form, switches between host/vm based on object type
    Uses a switchable view based on the profile type widget
    """
    @property
    def is_displayed(self):
        return (
            self.title.text == 'Adding a new Analysis Profile' and
            self.profile_type.text == self.context['object'].profile_type)

    title = Text('//div[@id="main-content"]//h1[@id="explorer_title"]'
                 '/span[@id="explorer_title_text"]')
    # This is a ALMOST a SummaryFormItem, but there's no div to wrap the items so it doesn't work
    # instead I have this nasty xpath to hack around that
    profile_type = Text(
        locator='.//h3[normalize-space(.)="Basic Information"]'
                '/following-sibling::div[@class="form-group"]'
                '/label[normalize-space(.)="Type"]'
                '/following-sibling::div')
    form = ConditionalSwitchableView(reference='profile_type')
    # to avoid dynamic table buttons use title + alt + classes
    add = Button(title='Add', classes=[Button.PRIMARY], alt='Add')
    cancel = Button(title='Cancel', classes=[Button.DEFAULT], alt='Cancel')

    @form.register('Host')
    class AnalysisProfileAddHost(AnalysisProfileBaseAddForm):
        """View for the host profile add form"""
        pass

    @form.register('Vm')
    class AnalysisProfileAddVm(AnalysisProfileBaseAddForm):
        """View for the vm profile add form"""
        @View.nested
        class categories(Tab):  # noqa
            TAB_NAME = 'Category'
            tab_form = CheckboxSelect(search_root='form_div')

        @View.nested
        class registry(Tab):  # noqa
            TAB_NAME = 'Registry'
            tab_form = DynamicTable(
                locator='.//h3[normalize-space(.)="Registry Entry"]/following-sibling::table',
                column_widgets={
                    'Registry Hive': Text('.//tr[@id="new_tr"]/td[normalize-space(.)="HKLM"]'),
                    'Registry Key': TextInput(id='entry_kname'),
                    'Registry Value': TextInput(id='entry_value'),
                    'Actions': Button(title='Add this entry', classes=table_button_classes)},
                assoc_column='Registry Key', rows_ignore_top=1, action_row=0)
Ejemplo n.º 10
0
    class template(SatTab):
        name = TextInput(id='ptable_name')
        default = Checkbox(id='ptable_default')
        snippet = Checkbox(locator="//input[@id='ptable_snippet']")
        os_family_selection = ConditionalSwitchableView(reference='snippet')

        @os_family_selection.register(True)
        class SnippetOption(View):
            pass

        @os_family_selection.register(False)
        class OSFamilyOption(View):
            os_family = FilteredDropdown(id='s2id_ptable_os_family')

        template_editor = ACEEditor()
        audit_comment = TextInput(id='ptable_audit_comment')
Ejemplo n.º 11
0
    class PuppetRepository(View):
        upstream_url = EditableEntry(name='Upstream URL')
        verify_ssl = EditableEntryCheckbox(name='Verify SSL')
        upstream_authorization = AuthorizationEntry(name='Upstream Authorization')
        mirror_on_sync = EditableEntryCheckbox(name='Mirror on Sync')
        publish_via_https = ReadOnlyEntry(name='Publish via HTTPS')
        publish_via_http = EditableEntryCheckbox(name='Publish via HTTP')
        published_at = ReadOnlyEntry(name='Published At')
        upload_content = FileInput(name='content[]')
        upload = Text("//button[contains(., 'Upload')]")
        http_proxy_policy = EditableEntrySelect(name='HTTP Proxy')
        proxy_policy = ConditionalSwitchableView(reference='http_proxy_policy')

        @proxy_policy.register(True, default=True)
        class NoSpecificHttpProxy(View):
            pass
Ejemplo n.º 12
0
    class AnsibleCollectionRepository(View):
        arch_restrict = EditableEntrySelect(name='Restrict to architecture')
        upstream_url = EditableEntry(name='Upstream URL')
        requirements = EditableEntry(name='Requirements')
        verify_ssl = EditableEntryCheckbox(name='Verify SSL')
        upstream_authorization = AuthorizationEntry(name='Upstream Authorization')
        mirror_on_sync = EditableEntryCheckbox(name='Mirror on Sync')
        publish_via_http = EditableEntryCheckbox(name='Publish via HTTP')
        upload_content = FileInput(name='content[]')
        upload = Text("//button[contains(., 'Upload')]")
        http_proxy_policy = EditableEntrySelect(name='HTTP Proxy')
        proxy_policy = ConditionalSwitchableView(reference='http_proxy_policy')

        @proxy_policy.register(True, default=True)
        class NoSpecificHttpProxy(View):
            pass
Ejemplo n.º 13
0
    class FileRepository(View):
        upstream_url = TextInput(id='url')
        verify_ssl = Checkbox(id='verify_ssl_on_sync')
        upstream_username = TextInput(id='upstream_username')
        upstream_password = TextInput(id='upstream_password')
        auth_token = TextInput(id='ansible_collection_auth_token')
        mirroring_policy = Select(id='mirroring_policy')
        publish_via_http = Checkbox(id='unprotected')
        http_proxy_policy = Select(id="http_proxy_policy")
        proxy_policy = ConditionalSwitchableView(reference='http_proxy_policy')
        ssl_ca_cert = Select(id='ssl_ca_cert_id')
        ssl_client_cert = Select(id='ssl_client_cert_id')
        ssl_client_key = Select(id='ssl_client_key_id')

        @proxy_policy.register('Use specific HTTP Proxy')
        class SpecificHttpProxy(View):
            http_proxy = Select(id="http_proxy")
Ejemplo n.º 14
0
    class AnsibleCollectionRepository(View):
        arch_restrict = Select(id='architecture_restricted')
        upstream_url = TextInput(id='url')
        requirements = TextInput(id='ansible_collection_requirements')
        requirements_btn = FileInput(id='requirementFile')
        auth_url = TextInput(id='ansible_collection_auth_url')
        auth_token = TextInput(id='ansible_collection_auth_token')
        verify_ssl = Checkbox(id='verify_ssl_on_sync')
        upstream_username = TextInput(id='upstream_username')
        upstream_password = TextInput(id='upstream_password')
        mirror_on_sync = Checkbox(id='mirror_on_sync')
        http_proxy_policy = Select(id="http_proxy_policy")
        proxy_policy = ConditionalSwitchableView(reference='http_proxy_policy')

        @proxy_policy.register('Use specific HTTP Proxy')
        class SpecificHttpProxy(View):
            http_proxy = Select(id="http_proxy")
Ejemplo n.º 15
0
    class create_repo(View):
        """Represent Create Repository page. Depends whether we like create new
        product or use existing one we use different sets of fields that need
        to be filled
        """

        product_type = SatSelect(
            locator="//select[@ng-model='createRepoChoices.newProduct']")
        product_content = ConditionalSwitchableView(reference='product_type')

        @product_content.register('Existing Product')
        class ExistingProductForm(View):
            product_name = Select(
                locator=
                "//select[@ng-model='createRepoChoices.existingProductId']")

        @product_content.register('New Product')
        class NewProductForm(View):
            product_name = TextInput(id='productName')
            label = TextInput(id='productLabel')
            gpg_key = Select(
                locator="//select[contains(@ng-model,'gpg_key_id')]")

        serve_via_http = Checkbox(id='unprotected')
        verify_ssl = Checkbox(id='verify_ssl')
        run_procedure = Text(
            "//button[contains(., 'Run Repository Creation')]")
        create_repos_table = Table(
            locator='//table',
            column_widgets={
                'Repository Name':
                TextInput(locator=".//input[@name='repo_name']"),
                'Repository Label':
                TextInput(locator=".//input[@name='repo_label']"),
            },
        )

        def wait_repo_created(self):
            wait_for(
                lambda: self.create_repos_table.row(
                    create_status__contains='Repository created').is_displayed
                is True,
                timeout=300,
                delay=1,
                logger=self.logger,
            )
Ejemplo n.º 16
0
class ProviderDetailsView(BaseLoggedInPage):
    """
     main Details page
    """
    title = Text('//div[@id="main-content"]//h1')
    breadcrumb = BreadCrumb(locator='//ol[@class="breadcrumb"]')
    flash = FlashMessages(
        './/div[@id="flash_msg_div"]/div[@id="flash_text_div" or '
        'contains(@class, "flash_text_div")]')
    toolbar = View.nested(ProviderDetailsToolBar)

    entities = ConditionalSwitchableView(reference='toolbar.view_selector',
                                         ignore_bad_reference=True)

    @entities.register('Summary View', default=True)
    class ProviderDetailsSummaryView(View):
        """
        represents Details page when it is switched to Summary aka Tables view
        """
        properties = SummaryTable(title="Properties")
        status = SummaryTable(title="Status")
        relationships = SummaryTable(title="Relationships")
        overview = SummaryTable(title="Overview")
        smart_management = SummaryTable(title="Smart Management")
        custom_attributes = SummaryTable(title='Custom Attributes')

    @entities.register('Dashboard View')
    class ProviderDetailsDashboardView(View):
        """
         represents Details page when it is switched to Dashboard aka Widgets view
        """
        # todo: need to develop this page
        pass

    @property
    def is_displayed(self):
        if (not self.toolbar.view_selector.is_displayed
                or self.toolbar.view_selector.selected == 'Summary View'):
            subtitle = 'Summary'
        else:
            subtitle = 'Dashboard'

        title = '{name} ({subtitle})'.format(name=self.context['object'].name,
                                             subtitle=subtitle)
        return (self.logged_in_as_current_user and self.breadcrumb.is_displayed
                and self.breadcrumb.active_location == title)
Ejemplo n.º 17
0
class ProviderDetailsView(BaseLoggedInPage):
    """
     main Details page
    """
    title = Text('//div[@id="main-content"]//h1')
    breadcrumb = BreadCrumb(locator='//ol[@class="breadcrumb"]')
    toolbar = View.nested(ProviderDetailsToolBar)

    entities = ConditionalSwitchableView(reference='toolbar.view_selector',
                                         ignore_bad_reference=True)

    @entities.register('Summary View', default=True)
    class ProviderDetailsSummaryView(View):
        """
        represents Details page when it is switched to Summary aka Tables view
        """
        summary = ParametrizedSummaryTable()
        sidebar = View.nested(SummaryAccordionView)

        @property
        def is_displayed(self):
            return self.summary("Properties").is_displayed

    @entities.register('Dashboard View')
    class ProviderDetailsDashboardView(View):
        """
         represents Details page when it is switched to Dashboard aka Widgets view
        """
        cards = ParametrizedStatusBox()

        @property
        def is_displayed(self):
            return self.cards("Instances").is_displayed

    @property
    def is_displayed(self):
        subtitle = 'Summary'
        if self.toolbar.view_selector.is_displayed:
            subtitle = self.toolbar.view_selector.selected.split(' ')[0]

        title = '{name} ({subtitle})'.format(name=self.context['object'].name,
                                             subtitle=subtitle)
        return (self.entities.is_displayed and self.logged_in_as_current_user
                and self.breadcrumb.is_displayed
                and self.breadcrumb.active_location == title)  # BZ 1703744
Ejemplo n.º 18
0
class PartitionTableEditView(BaseLoggedInView):
    breadcrumb = BreadCrumb()
    name = TextInput(locator="//input[@id='ptable_name']")
    default = Checkbox(id='ptable_default')
    template = ACEEditor()
    audit_comment = TextInput(id="ptable_audit_comment")
    submit = Text('//input[@name="commit"]')

    snippet = Checkbox(locator="//input[@id='ptable_snippet']")
    os_family_selection = ConditionalSwitchableView(reference='snippet')

    @os_family_selection.register(True)
    class SnippetOption(View):
        pass

    @os_family_selection.register(False)
    class OSFamilyOption(View):
        os_family = FilteredDropdown(id='s2id_ptable_os_family')

    @View.nested
    class locations(SatTab):
        resources = MultiSelect(id='ms-ptable_location_ids')

        def fill(self, values):
            self.resources.fill(values)

        def read(self):
            return self.resources.read()

    @View.nested
    class organizations(SatTab):
        resources = MultiSelect(id='ms-ptable_organization_ids')

        def fill(self, values):
            self.resources.fill(values)

        def read(self):
            return self.resources.read()

    @property
    def is_displayed(self):
        breadcrumb_loaded = self.browser.wait_for_element(self.breadcrumb,
                                                          exception=False)
        return (breadcrumb_loaded and self.breadcrumb.locations[0] == 'Ptables'
                and self.breadcrumb.read().startswith('Edit '))
Ejemplo n.º 19
0
        class template_input(View):
            ROOT = "//div[contains(@class, 'template_inputs')]" \
                   "/following-sibling::div[1]"
            name = TextInput(locator=".//input[contains(@name, '[name]')]")
            required = Checkbox(locator=".//input[contains(@id, 'required')]")
            input_type = SatSelect(
                locator=".//select[contains(@name, '[input_type]')]")

            input_content = ConditionalSwitchableView(reference='input_type')

            @input_content.register('User input')
            class UserInputForm(View):
                advanced = Checkbox(
                    locator=".//input[contains(@id, 'advanced')]")
                options = TextInput(
                    locator=".//textarea[contains(@name, '[options]')]")
                description = TextInput(
                    locator=".//textarea[contains(@name, '[description]')]")

            @input_content.register('Fact value')
            class FactValueForm(View):
                fact_name = TextInput(
                    locator=".//input[contains(@name, '[fact_name]')]")
                description = TextInput(
                    locator=".//textarea[contains(@name, '[description]')]")

            @input_content.register('Variable value')
            class VariableValueForm(View):
                variable_name = TextInput(
                    locator=".//input[contains(@name, '[variable_name]')]")
                description = TextInput(
                    locator=".//textarea[contains(@name, '[description]')]")

            @input_content.register('Puppet parameter')
            class PuppetParameterForm(View):
                puppet_class_name = TextInput(
                    locator=".//input[contains(@name, '[puppet_class_name]')]")
                puppet_parameter_name = TextInput(
                    locator=".//input[contains("
                            "@name, '[puppet_parameter_name]')]")
                description = TextInput(
                    locator=".//textarea[contains(@name, '[description]')]")

            def before_fill(self, values=None):
                self.parent.add_template_inputs.click()
Ejemplo n.º 20
0
    class operating_system(SatTab):
        TAB_NAME = 'Operating System'

        architecture = FilteredDropdown(id='hostgroup_architecture')
        operating_system = FilteredDropdown(id='hostgroup_operatingsystem')
        media_type = RadioGroup(locator="//div[label[contains(., 'Media Selection')]]")
        media_content = ConditionalSwitchableView(reference='media_type')

        @media_content.register('All Media')
        class TypeMedium(View):
            media = FilteredDropdown(id='hostgroup_medium')

        @media_content.register('Synced Content')
        class TypeSynced(View):
            synced_content = FilteredDropdown(id='host_group_kickstart_repository')

        ptable = FilteredDropdown(id='hostgroup_ptable')
        root_password = TextInput(id='hostgroup_root_pass')
Ejemplo n.º 21
0
    class schedule(BaseLoggedInView):
        next_step = Text("//input[contains(@value, 'Next')]")
        period = FilteredDropdown(id='s2id_policy_period')
        period_selection = ConditionalSwitchableView(reference='period')

        @period_selection.register('Weekly')
        class WeeklyPeriodForm(View):
            weekday = FilteredDropdown(id='s2id_policy_weekday')

        @period_selection.register('Monthly')
        class MonthlyPeriodForm(View):
            day_of_month = FilteredDropdown(id='s2id_policy_day_of_month')

        @period_selection.register('Custom')
        class CustomPeriodForm(View):
            cron_line = TextInput(id='policy_cron_line')

        def after_fill(self, was_change):
            self.next_step.click()
Ejemplo n.º 22
0
    class DockerRepository(View):
        upstream_url = TextInput(id='url')
        upstream_repo_name = TextInput(id='docker_upstream_name')
        verify_ssl = Checkbox(id='verify_ssl_on_sync')
        upstream_username = TextInput(id='upstream_username')
        upstream_password = TextInput(id='upstream_password')
        auth_token = TextInput(id='ansible_collection_auth_token')
        mirroring_policy = Select(id='mirroring_policy')
        include_tags = TextInput(id='include_tags')
        exclude_tags = TextInput(id='exclude_tags')
        http_proxy_policy = Select(id="http_proxy_policy")
        proxy_policy = ConditionalSwitchableView(reference='http_proxy_policy')
        ssl_ca_cert = Select(id='ssl_ca_cert_id')
        ssl_client_cert = Select(id='ssl_client_cert_id')
        ssl_client_key = Select(id='ssl_client_key_id')

        @proxy_policy.register('Use specific HTTP Proxy')
        class SpecificHttpProxy(View):
            http_proxy = Select(id="http_proxy")
Ejemplo n.º 23
0
class TemplateInputItem(GenericRemovableWidgetItem):
    """Template Input item view"""
    remove_button = Text(".//a[@class='remove_nested_fields']")
    name = TextInput(locator=".//input[contains(@name, '[name]')]")
    required = Checkbox(locator=".//input[contains(@id, 'required')]")
    input_type = SatSelect(
        locator=".//select[contains(@name, '[input_type]')]")

    input_content = ConditionalSwitchableView(reference='input_type')

    @input_content.register('User input')
    class UserInputForm(View):
        advanced = Checkbox(
            locator=".//input[contains(@id, 'advanced')]")
        options = TextInput(
            locator=".//textarea[contains(@name, '[options]')]")
        description = TextInput(
            locator=".//textarea[contains(@name, '[description]')]")

    @input_content.register('Fact value')
    class FactValueForm(View):
        fact_name = TextInput(
            locator=".//input[contains(@name, '[fact_name]')]")
        description = TextInput(
            locator=".//textarea[contains(@name, '[description]')]")

    @input_content.register('Variable')
    class VariableValueForm(View):
        variable_name = TextInput(
            locator=".//input[contains(@name, '[variable_name]')]")
        description = TextInput(
            locator=".//textarea[contains(@name, '[description]')]")

    @input_content.register('Puppet parameter')
    class PuppetParameterForm(View):
        puppet_class_name = TextInput(
            locator=".//input[contains(@name, '[puppet_class_name]')]")
        puppet_parameter_name = TextInput(
            locator=".//input[contains("
                    "@name, '[puppet_parameter_name]')]")
        description = TextInput(
            locator=".//textarea[contains(@name, '[description]')]")
Ejemplo n.º 24
0
class SyncTemplatesView(BaseLoggedInView):
    breadcrumb = BreadCrumb()
    title = Text("//h2[contains(., 'Import or Export Templates')]")
    sync_type = RadioGroup("//div[label[contains(., 'Action type')]]")
    submit = Text("//button[@type='submit']")

    template = ConditionalSwitchableView(reference='sync_type')

    @property
    def is_displayed(self):
        breadcrumb_loaded = self.browser.wait_for_element(self.breadcrumb,
                                                          exception=False)
        return (breadcrumb_loaded and self.browser.wait_for_element(
            self.title, exception=False) is not None)

    def before_fill(self, values):
        """Wait for Sync Type Radio Button to be displayed"""
        wait_for(lambda: self.sync_type.is_displayed,
                 timeout=10,
                 delay=1,
                 logger=self.logger)

    @template.register('Import')
    class ImportTemplates(View):
        associate = Select(name='associate')
        branch = TextInput(name='branch')
        dirname = TextInput(name='dirname')
        filter = TextInput(name='filter')
        force_import = Checkbox(name='force')
        lock = Checkbox(name='lock')
        negate = Checkbox(name='negate')
        prefix = TextInput(name='prefix')
        repo = TextInput(name='repo')

    @template.register('Export')
    class ExportTemplates(View):
        branch = TextInput(name='branch')
        dirname = TextInput(name='dirname')
        filter = TextInput(name='filter')
        metadata_export_mode = Select(name='metadata_export_mode')
        negate = Checkbox(name='negate')
        repo = TextInput(name='repo')
Ejemplo n.º 25
0
    class YumRepository(View):
        arch_restrict = Select(id='architecture_restricted')
        upstream_url = TextInput(id='url')
        verify_ssl = Checkbox(id='verify_ssl_on_sync')
        upstream_username = TextInput(id='upstream_username')
        upstream_password = TextInput(id='upstream_password')
        download_policy = Select(id='download_policy')
        mirror_on_sync = Checkbox(id='mirror_on_sync')
        checksum_type = Select(id='checksum_type')
        publish_via_http = Checkbox(id='unprotected')
        gpg_key = Select(id='gpg_key_id')
        ssl_ca_cert = Select(id='ssl_ca_cert_id')
        ssl_client_cert = Select(id='ssl_client_cert_id')
        ssl_client_key = Select(id='ssl_client_key_id')
        http_proxy_policy = Select(id="http_proxy_policy")
        proxy_policy = ConditionalSwitchableView(reference='http_proxy_policy')

        @proxy_policy.register('Use specific HTTP Proxy')
        class SpecificHttpProxy(View):
            http_proxy = Select(id="http_proxy")
Ejemplo n.º 26
0
    class options(PotentiallyInvisibleTab):  # noqa
        form = ConditionalSwitchableView(reference="type")
        type = BootstrapSelect('button_type')

        @form.register('Default')
        class ButtonFormDefaultView(View):  # noqa
            dialog = BootstrapSelect('dialog_id')

        @form.register('Ansible Playbook')
        class ButtonFormAnsibleView(View):  # noqa
            playbook_cat_item = BootstrapSelect('service_template_id')
            inventory = AutomateRadioGroup(
                locator=".//input[@name='inventory']/..")
            hosts = Input(name='hosts')

        text = Input(name='name')
        display = Checkbox(name='display')
        hover = Input(name='description')
        image = FonticonPicker('button_icon')
        open_url = Checkbox('open_url')
Ejemplo n.º 27
0
    class options(PotentiallyInvisibleTab):  # noqa
        form = ConditionalSwitchableView(reference="type")
        type = BootstrapSelect("button_type")

        @form.register("Default")
        class ButtonFormDefaultView(View):  # noqa
            dialog = BootstrapSelect("dialog_id")

        @form.register("Ansible Playbook")
        class ButtonFormAnsibleView(View):  # noqa
            playbook_cat_item = BootstrapSelect("service_template_id")
            inventory = AutomateRadioGroup(locator=".//input[@name='inventory']/..")
            hosts = Input(name="hosts")

        text = Input(name="name")
        display = Checkbox(name="display")
        hover = Input(name="description")
        image = FonticonPicker("button_icon")
        icon_color = ColourInput(id="button_color")
        open_url = Checkbox("open_url")
        display_for = Select(id="display_for")
        submit = Select(id="submit_how")
Ejemplo n.º 28
0
    class form(View):  # noqa
        auth_mode = BootstrapSelect(id='authentication_mode')
        auth_settings = ConditionalSwitchableView(reference='auth_mode')

        auth_settings.register('Database',
                               default=True,
                               widget=DatabaseAuthenticationView)
        auth_settings.register('LDAP', widget=LdapAuthenticationView)
        auth_settings.register('LDAPS', widget=LdapsAuthenticationView)
        auth_settings.register('Amazon', widget=AmazonAuthenticationView)
        auth_settings.register('External (httpd)',
                               widget=ExternalAuthenticationView)

        def before_fill(self, values):
            """Select the auth mode first"""
            new_mode = values.pop('auth_mode')
            if new_mode:
                # view context's object is a Server, if no AUTH_MODE_MAP match is found use
                # passed value
                mapped_mode = AuthenticationSetting.mode_map.get(
                    new_mode.capitalize(), new_mode)
                self.auth_mode.fill(mapped_mode)
Ejemplo n.º 29
0
class ProviderDetailsView(BaseLoggedInPage):
    """
     main Details page
    """
    title = Text('//div[@id="main-content"]//h1')
    breadcrumb = BreadCrumb(locator='//ol[@class="breadcrumb"]')
    toolbar = View.nested(ProviderDetailsToolBar)

    entities = ConditionalSwitchableView(reference='toolbar.view_selector',
                                         ignore_bad_reference=True)

    @entities.register('Summary View', default=True)
    class ProviderDetailsSummaryView(View):
        """
        represents Details page when it is switched to Summary aka Tables view
        """
        summary = ParametrizedSummaryTable()

    @entities.register('Dashboard View')
    class ProviderDetailsDashboardView(View):
        """
         represents Details page when it is switched to Dashboard aka Widgets view
        """
        # todo: need to develop this page
        pass

    @property
    def is_displayed(self):
        if (not self.toolbar.view_selector.is_displayed or
                self.toolbar.view_selector.selected == 'Summary View'):
            subtitle = 'Summary'
        else:
            subtitle = 'Dashboard'

        title = '{name} ({subtitle})'.format(name=self.context['object'].name,
                                             subtitle=subtitle)
        return (self.logged_in_as_current_user and
                self.breadcrumb.is_displayed and
                self.breadcrumb.active_location == title)
Ejemplo n.º 30
0
    class form(View):  # noqa
        retirement_mode = BootstrapSelect(id='formMode')
        retirement_date = ConditionalSwitchableView(reference='retirement_mode')

        @retirement_date.register('Specific Date and Time', default=True)
        class RetirementDateSelectionView(View):
            datetime_select = TextInput(id='retirement_date_datepicker')

        @retirement_date.register('Time Delay from Now')
        class RetirementOffsetSelectionView(View):
            # TODO unique widget for these touchspin elements, with singular fill method
            # will allow for consistent fill of view.form
            months = TextInput(name='months')
            weeks = TextInput(name='weeks')
            days = TextInput(name='days')
            hours = TextInput(name='hours')
            retirement_offset_datetime = Text(
                locator='.//div[@id="retirement_date_result_div"]/input[@id="retirement_date"]')

        retirement_warning = BootstrapSelect(id='retirementWarning')
        entities = View.nested(BaseNonInteractiveEntitiesView)
        save = Button('Save')
        cancel = Button('Cancel')