from cfme import web_ui as ui from cfme.fixtures import pytest_selenium as sel from cfme.web_ui import Region, accordion, fill, flash, form_buttons from cfme.web_ui.menu import nav nav.add_branch( "reports", { "import_export": lambda ctx: accordion.tree("Import/Export", "Import / Export"), }) form = Region(locators=dict( export_select=ui.Select("//select[@id='choices_chosen']", multi=True), export_button=form_buttons.FormButton("Download Report to YAML"), import_overwrite=ui.Input('overwrite'), import_file=ui.Input('upload_file'), import_submit=ui.Input('upload_atags'))) export_select = ui.Select("//select[@id='choices_chosen']", multi=True) export_button = form_buttons.FormButton("Download Report to YAML") def export_reports(*custom_report_names): sel.force_navigate("import_export") fill(form.export_select, custom_report_names) sel.click(form.export_button) def import_reports(filename, overwrite=False): sel.force_navigate("import_export")
from utils.log import logger from utils.wait import wait_for, TimedOutError from cfme.services import requests buttons = Region( locators={ 'default': '//*[@id="buttons_off"]/a', 'apply': '//*[@id="buttons_on"]/a[1]', 'reset': '//*[@id="buttons_on"]/a[2]' }) filter_form = Form(fields=[ ("zone", ui.Select("//select[@id='chosen_zone']")), ("user", ui.Select("//select[@id='user_choice']")), ("time_period", ui.Select("//select[@id='time_period']")), ("task_status_queued", ui.Input('queued')), ("task_status_running", ui.Input('running')), ("task_status_ok", ui.Input('ok')), ("task_status_error", ui.Input('error')), ("task_status_warn", ui.Input('warn')), ("task_state", ui.Select("//select[@id='state_choice']")), ]) table_loc = '//div[@id="records_div"]/table' match_page = partial(match_location, controller='miq_task') tasks_table = CheckboxTable( table_locator='//div[@id="records_div"]/table[thead]', header_checkbox_locator= "//div[@id='records_div']//input[@id='masterToggle']")
retirement = BootstrapSelect('schedule__retirement') retirement_warning = BootstrapSelect('schedule__retirement_warn') # Infra stateless = Input(name='schedule__stateless') # TODO remove old form once all importers have moved to widget form provisioning_form = tabstrip.TabStripForm( fields=[('submit_button', form_buttons.FormButton("Submit")), ('submit_copy_button', form_buttons.FormButton("Submit this provisioning request")), ('cancel_button', form_buttons.cancel), ('host_submit_button', form_buttons.host_provision_submit), ('host_cancel_button', form_buttons.host_provision_cancel)], tab_fields=OrderedDict([ ('Request', [('email', ui.Input('requester__owner_email')), ('first_name', ui.Input('requester__owner_first_name')), ('last_name', ui.Input('requester__owner_last_name')), ('notes', ui.Input('requester__request_notes')), ('manager_name', ui.Input('requester__owner_manager'))]), ('Purpose', [('apply_tags', { version.LOWEST: ui.CheckboxTree('//div[@id="all_tags_treebox"]//ul'), '5.7': ui.BootstrapTreeview('all_tags_treebox') })]), ( 'Catalog', [ # Cloud ('num_instances', AngularSelect('service__number_of_vms')),
# -*- coding: utf-8 -*- from functools import partial from cfme import web_ui as ui from cfme.exceptions import CandidateNotFound from cfme.fixtures import pytest_selenium as sel from cfme.web_ui import Form, accordion, fill, flash, form_buttons, menu, DHTMLSelect, AngularSelect from cfme.web_ui import toolbar as tb from utils.update import Updateable from utils import version cfg_btn = partial(tb.select, "Configuration") buttons_tree = partial(accordion.tree, "Buttons", "Object Types") button_group_form = Form( fields=[ ('btn_group_text', ui.Input('name')), ('btn_group_hvr_text', ui.Input('description')), ('add_button', form_buttons.add), ('save_button', form_buttons.save) ]) button_form = Form( fields=[ ('btn_text', ui.Input('name')), ('btn_hvr_text', ui.Input('description')), ('select_dialog', ui.Select('select#dialog_id')), ('system_process', ui.Select('select#instance_name')), ('request', ui.Input('object_request')), ('add_button', form_buttons.add), ('save_button', form_buttons.save) ])
from utils.update import Updateable from utils.wait import wait_for lifecycle_btn = partial(tb.select, "Lifecycle") reload_func = partial(tb.select, "Reload current display") my_service_tree = partial(accordion.tree, "Services") details_page = Region(infoblock_type='detail') cfg_btn = partial(tb.select, "Configuration") policy_btn = partial(tb.select, "Policy") retirement_form = Form( fields=[('retirement_date', ui.Calendar('miq_date_1') ), ('retirement_warning', ui.Select("select#retirement_warn"))]) edit_service_form = Form( fields=[("name", ui.Input("name")), ("description", ui.Input("description"))]) set_ownership_form = Form( fields=[("select_owner", ui.Select("select#user_name") ), ("select_group", ui.Select("select#group_name"))]) edit_tags_form = Form(fields=[( "select_tag", ui.Select("select#tag_cat")), ("select_value", ui.Select("select#tag_add"))]) menu.nav.add_branch( 'my_services', { 'service': [ lambda ctx: my_service_tree('All Services', ctx['service_name']), {
cfg_btn = partial(tb.select, "Configuration") policy_btn = partial(tb.select, "Policy") download_btn = partial(tb.select, "download_choice") retirement_form = Form( fields=[ ('retirement_date', { version.LOWEST: ui.Calendar('miq_date_1'), '5.5': ui.Calendar('retirementDate')}), ('retirement_warning', ui.Select("select#retirement_warn")) ]) edit_service_form = Form( fields=[ ("name", ui.Input("name")), ("description", ui.Input("description")) ]) set_ownership_form = Form( fields=[ ("select_owner", ui.Select("select#user_name")), ("select_group", ui.Select("select#group_name")) ]) edit_tags_form = Form( fields=[ ("select_tag", ui.Select("select#tag_cat")), ("select_value", ui.Select("select#tag_add")) ])
class StorageManager(Updateable): """Represents the Storage / Storage Managers object. Allows interaction Args: name: Name of the Storage Namager as it appears in the UI. type: Type of the Storage Manager (eg. StorageManager.NETAPP_RS, ...) hostname: Host name of the machine. ip: IP Address of the machine. port: Port of the machine. credentials: :py:class:`dict` or :py:class:`StorageManager.Credential` """ class Credential(Updateable): def __init__(self, username=None, password=None): self.username = username self.password = password form = Form(fields=[ ("name", ui.Input("name")), ("type", ui.Select("select#sm_type")), ("hostname", ui.Input("hostname")), ("ip", ui.Input("ipaddress")), ("port", ui.Input("port")), ("credentials", Form(fields=[("username", ui.Input("userid")), ("password", MultiFill(ui.Input("password"), ui.Input("verify")))])), ]) validate = form_buttons.FormButton( "Validate the credentials by logging into the Server") add = form_buttons.FormButton("Add this Storage Manager") ## # Types constants. Extend if needed :) NETAPP_RS = "NetApp Remote Service" def __init__(self, name=None, type=None, hostname=None, ip=None, port=None, credentials=None): self.name = name self.type = type self.hostname = hostname self.ip = ip self.port = port self.credentials = credentials def create(self, validate=True, cancel=False): sel.force_navigate("storage_manager_new") fill(self.form, self) if validate: sel.click(self.validate) if cancel: sel.click(form_buttons.cancel) else: sel.click(self.add) flash.assert_no_errors() def update(self, updates, validate=True, cancel=False): sel.force_navigate("storage_manager_edit", context={"storage_manager": self}) fill(self.form, updates) if validate: sel.click(self.validate) if cancel: sel.click(form_buttons.cancel) else: sel.click(form_buttons.save) flash.assert_no_errors() def delete(self, cancel=False): self.navigate() cfg_btn("Remove this Storage Manager from the VMDB", invokes_alert=True) sel.handle_alert(cancel) flash.assert_no_errors() def navigate(self): sel.force_navigate("storage_manager", context={"storage_manager": self}) def refresh_inventory(self): self.navigate() cfg_btn("Refresh Inventory", invokes_alert=True) sel.handle_alert(cancel=False) flash.assert_no_errors() def refresh_status(self): self.navigate() cfg_btn("Refresh Status", invokes_alert=True) sel.handle_alert(cancel=False) flash.assert_no_errors() def wait_until_updated(self, num_sec=300): def _wait_func(): self.navigate() return InfoBlock("Properties", "Last Update Status").text.strip().lower() == "ok" wait_for(_wait_func, num_sec=num_sec, delay=5) @property def exists(self): try: self.navigate() return True except StorageManagerNotFound: return False