def submit_obj(obj): """Submits obj. Sets object id and code after that.""" obj_type = obj.obj_type() object_modal.get_modal_obj(obj_type).submit_obj(obj) obj.obj_id = object_page.ObjectPage().get_obj_id() obj.code = entity_operations.obj_code(object_type=obj_type, obj_id=obj.obj_id)
def submit_obj(obj): """Submits obj. Sets object id, code and modified_by after that.""" obj_name = obj.obj_name() object_modal.get_modal_obj(obj_name).submit_obj(obj) obj.obj_id = object_page.ObjectPage().get_obj_id() if not obj.code: obj.code = entity_operations.obj_code( object_type=obj_name, obj_id=obj.obj_id) obj.modified_by = users.current_person()
def raise_issue(self, issue_entity): """Click on "raise issue" button then fill IssueCreate modal and save the Issue. """ raise_btn = base.Button(self._driver, self.table_element.find_element( *self._locators.TAB_BUTTON)) raise_btn.click() object_modal.get_modal_obj("issue", self._driver).submit_obj(issue_entity) selenium_utils.wait_for_js_to_load(self._driver)
def __init__(self, _driver=None): super(InfoWidget, self).__init__() self.child_cls_name = self.__class__.__name__ self.obj_name = objects.get_singular(self.child_cls_name) self.is_asmts_info_widget = ( self.child_cls_name.lower() == objects.ASSESSMENTS) self.list_all_headers_txt = [] self.list_all_values_txt = [] self.inline_edit_controls = self._browser.elements( class_name="set-editable-group") self.tabs = tab_element.Tabs(self._browser, tab_element.Tabs.INTERNAL) self.add_tab_btn = self._browser.element( data_test_id="button_widget_add_2c925d94") self._attributes_tab_name = "Attributes" self._changelog_tab_name = "Change Log" # for overridable methods if (self.__class__ in [ Controls, Programs, Regulations, Objectives, Contracts, Policies, Risks, Standards, Threat, Requirements ]): if self.is_info_page: self.tabs.ensure_tab(self._attributes_tab_name) self.comment_area = self._comment_area() self.edit_popup = object_modal.get_modal_obj(self.obj_name, self._driver)
def click_create_and_map_obj(self): """Clicks `Create and map new object` link and returns new modal for object.""" self._browser.element(class_name="modal-header").button( text="Create and map new object").click() return object_modal.get_modal_obj( obj_type=objects.get_singular(self.tree_view.obj_name))
def edit_obj(self, obj, **changes): """Opens `obj` and makes `changes` using Edit modal.""" obj_info_page = self.open_info_page_of_obj(obj) obj_info_page.three_bbs.select_edit() modal = object_modal.get_modal_obj(obj.type, self.driver) modal.fill_form(**changes) modal.save_and_close()
def click_create_and_map_obj(self): """Clicks `Create and map new object` link and returns new modal for object.""" _selected_obj_type = next(x.label for x in self._obj_type_select.options() if x.selected) self._create_and_map_obj_btn.click() return object_modal.get_modal_obj( obj_type=objects.get_singular(_selected_obj_type))
def __init__(self, _driver=None): super(InfoWidget, self).__init__() # for overridable methods if (self.__class__ in [Programs, Regulations, Objectives, Contracts, Policies, Standards, Threat, Requirements]): if self.is_info_page: self.tabs.ensure_tab(self._attributes_tab_name) self.inline_edit_controls = self._browser.elements( class_name="set-editable-group") self.edit_popup = object_modal.get_modal_obj(self.obj_name, self._driver)
def _assert_title_editable(obj, selenium, info_page): """Assert that user can edit object's title""" new_title = "[EDITED]" + obj.title info_page.three_bbs.select_edit() modal = object_modal.get_modal_obj(obj.type, selenium) modal.fill_form(title=new_title) modal.save_and_close() obj.update_attrs( title=new_title, modified_by=users.current_user().email, updated_at=rest_service.ObjectsInfoService().get_obj( obj=obj).updated_at) new_ui_obj = _get_ui_service(selenium, obj).get_obj_from_info_page(obj) base.Test.general_equal_assert( obj.repr_ui(), new_ui_obj, "audit", "custom_attributes")
def _assert_title_editable(obj, selenium, info_page): """Assert that user can edit object's title""" new_title = "[EDITED]" + obj.title info_page.three_bbs.select_edit() modal = object_modal.get_modal_obj(obj.type, selenium) modal.fill_form(title=new_title) modal.save_and_close() obj.update_attrs(title=new_title, modified_by=users.current_user().email, updated_at=rest_service.ObjectsInfoService().get_obj( obj=obj).updated_at) new_ui_obj = _get_ui_service(selenium, obj).get_obj_from_info_page(obj) base.Test.general_equal_assert(obj.repr_ui(), new_ui_obj, "audit", "custom_attributes")
def test_default_values_in_create_task_popup( self, app_workflow, app_task_group, selenium ): """Test expected default values in Create Task popup.""" # pylint: disable=invalid-name workflow_ui_facade.open_create_task_group_task_popup(app_task_group) task_modal = object_modal.get_modal_obj("task_group_task") actual_start_date = ui_dict_convert.str_to_date( task_modal.get_start_date()) actual_due_date = ui_dict_convert.str_to_date( task_modal.get_due_date()) assert actual_start_date == date_utils.first_not_weekend_day( datetime.date.today()) assert actual_due_date == actual_start_date + datetime.timedelta(days=7)
def test_default_values_in_create_task_popup(self, app_workflow, app_task_group, selenium): """Test expected default values in Create Task popup.""" # pylint: disable=invalid-name workflow_ui_facade.open_create_task_group_task_popup(app_task_group) task_modal = object_modal.get_modal_obj("task_group_task") actual_start_date = ui_dict_convert.str_to_date( task_modal.get_start_date()) actual_due_date = ui_dict_convert.str_to_date( task_modal.get_due_date()) assert actual_start_date == date_utils.first_not_weekend_day( datetime.date.today()) assert actual_due_date == actual_start_date + datetime.timedelta( days=7)
def test_permalink(self, selenium, program): """Verify url is copied to clipboard.""" info_page = webui_service.ProgramsService( selenium).open_info_page_of_obj(program) info_page.open_info_3bbs().select_get_permalink() # test notification alert base.AnimatedComponent(selenium, [locator.WidgetInfoProgram.ALERT_LINK_COPIED], wait_until_visible=True) # test generated link # Doesn't work on Mac as Chromedriver / Devtools emulate keys on browser # level (Cmd + V works on OS level). # https://github.com/GoogleChrome/puppeteer/issues/1313 # https://bugs.chromium.org/p/chromedriver/issues/detail?id=30 info_page.open_info_3bbs().select_edit() modal = object_modal.get_modal_obj("program", selenium) modal.title_field.set(keys.Keys.CONTROL, "v") assert modal.title_field.value == program.url
def test_permalink(self, selenium, program): """Verify url is copied to clipboard.""" info_page = webui_service.ProgramsService( selenium).open_info_page_of_obj(program) info_page.three_bbs.select_get_permalink() # test notification alert base.AnimatedComponent( selenium, [locator.WidgetInfoProgram.ALERT_LINK_COPIED], wait_until_visible=True) # test generated link # Doesn't work on Mac as Chromedriver / Devtools emulate keys on browser # level (Cmd + V works on OS level). # https://github.com/GoogleChrome/puppeteer/issues/1313 # https://bugs.chromium.org/p/chromedriver/issues/detail?id=30 info_page.three_bbs.select_edit() modal = object_modal.get_modal_obj("program", selenium) modal.title_field.set(keys.Keys.CONTROL, "v") assert modal.title_field.value == program.url
def __init__(self, _driver=None): super(InfoWidget, self).__init__() self.child_cls_name = self.__class__.__name__ self.obj_name = objects.get_singular(self.child_cls_name) self.is_asmts_info_widget = ( self.child_cls_name.lower() == objects.ASSESSMENTS) self.list_all_headers_txt = [] self.list_all_values_txt = [] self.inline_edit_controls = self._browser.elements( class_name="set-editable-group") self.tabs = tab_element.Tabs(self._browser, tab_element.Tabs.INTERNAL) self.add_tab_btn = self._browser.element( data_test_id="button_widget_add_2c925d94") self._attributes_tab_name = "Attributes" self._changelog_tab_name = "Change Log" # for overridable methods if (self.__class__ in [Controls, Programs, Regulations, Objectives, Contracts, Policies, Risks, Standards, Threats, Requirements]): if self.is_info_page: self.tabs.ensure_tab(self._attributes_tab_name) self.comment_area = self._comment_area() self.edit_popup = object_modal.get_modal_obj(self.obj_name, self._driver)
def create_obj_via_tree_view(self, src_obj, obj): """Open generic widget of mapped objects, open creation modal from Tree View, fill data according to object attributes and create new object. """ self.open_widget_of_mapped_objs(src_obj).tree_view.open_create() object_modal.get_modal_obj(obj.type, self.driver).submit_obj(obj)
def submit_obj_modal(self, obj): """Submits object modal with `obj`.""" object_modal.get_modal_obj(obj.type, self.driver).submit_obj(obj)
def edit_obj(self, **changes): """Makes changes `changes` to object.""" self.three_bbs.select_edit() modal = object_modal.get_modal_obj(self.obj_name) modal.fill_form(**changes) modal.save_and_close()
def delete_task_group(self, task_group): """Deletes task group.""" self.open_task_group(task_group) self._task_group_panel.click_to_edit() object_modal.get_modal_obj("task_group_task").delete()
def __init__(self, _driver=None): super(InfoWidget, self).__init__() self.child_cls_name = self.__class__.__name__ self.obj_name = objects.get_singular(self.child_cls_name) self.is_asmts_info_widget = ( self.child_cls_name.lower() == objects.ASSESSMENTS) self.list_all_headers_txt = [] self.list_all_values_txt = [] self.info_widget_locator = (self._locators.INFO_PAGE_ELEM if self.is_info_page else self._locators.INFO_PANEL_ELEM) self.info_widget_elem = selenium_utils.get_when_visible( self._driver, self.info_widget_locator) # common for all objects self.state_lbl_txt = self._elements.STATE.upper() self._extend_list_all_scopes( ["TITLE", self.state_lbl_txt], [self.title(), self.status()]) self.info_3bbs_btn = self._browser.element( xpath=self._locators.BUTTON_3BBS_XPATH) self.inline_edit_controls = self._browser.elements( class_name="set-editable-group") # for Info Page if self.is_info_page: self._extend_list_all_scopes([ self._elements.CREATED_AT.upper(), self._elements.MODIFIED_BY.upper(), self._elements.UPDATED_AT.upper() ], [self.created_at(), self.modified_by(), self.updated_at()]) # for Info Panel else: self.panel = ( SnapshotedInfoPanel(self._driver, self.info_widget_elem) if (self.child_cls_name.lower() in objects.ALL_SNAPSHOTABLE_OBJS and self.is_snapshoted_panel) else InfoPanel( self._driver, self.info_widget_elem)) # for tab controller if not self.is_snapshoted_panel: self.tab_container_elem = self.info_widget_elem.find_element( *self._locators.TAB_CONTAINER_CSS) self.tab_container = (tab_containers.AssessmentsTabContainer( self._driver, self.tab_container_elem) if self.is_asmts_info_widget else tab_containers.TabContainer( self._driver, self.tab_container_elem)) self.tab_container.tab_controller.active_tab = ( self.tab_container._elements.OBJ_TAB) # core element to find sub elements self.core_elem = (self.info_widget_elem if self.is_snapshoted_panel else self.tab_container.active_tab_elem) # for overridable methods if (self.__class__ in [ Controls, Programs, Regulations, Objectives, Contracts, Policies, Risks, Standards, Threats, Requirements ]): self._extend_list_all_scopes_by_review_state() self.comment_area = self._comment_area() self.edit_popup = object_modal.get_modal_obj(self.obj_name, self._driver) self.tabs = page_tab.Tabs(self._browser, page_tab.Tabs.INTERNAL)
def open_create_obj_modal(self, obj_type): """Click "Create object" button, select type and click.""" self.click_create_obj_btn() CreateObjectDropdown().click_item_by_text(text=obj_type) return object_modal.get_modal_obj(obj_type=obj_type)
def create_task_group_task(self, task_group_task): """Creates a task group task on the tab.""" self.open_create_task_group_task_modal(task_group_task.task_group) object_modal.get_modal_obj("task_group_task").submit_obj(task_group_task)
def add_task_group(workflow, task_group): """Adds task group.""" workflow_tabs.SetupTab().open_via_url(workflow) dashboard.Dashboard().start_task_group() object_modal.get_modal_obj("task_group").submit_obj(task_group)
def __init__(self, driver): super(InfoWidget, self).__init__(driver) self.child_cls_name = self.__class__.__name__ self.obj_name = objects.get_singular(self.child_cls_name) self.is_asmts_info_widget = ( self.child_cls_name.lower() == objects.ASSESSMENTS) self.list_all_headers_txt = [] self.list_all_values_txt = [] self.info_widget_locator = (self._locators.INFO_PAGE_ELEM if self.is_info_page else self._locators.INFO_PANEL_ELEM) self.info_widget_elem = selenium_utils.get_when_visible( self._driver, self.info_widget_locator) # common for all objects self.title = base.Element(self.info_widget_elem, self._locators.TITLE_ENTERED) self.state_lbl_txt = self._elements.STATE.upper() self.state_txt = self.get_state_txt() self._extend_list_all_scopes(["TITLE", self.state_lbl_txt], [self.title.text, self.state_txt]) self.info_3bbs_btn = self._browser.element( xpath=self._locators.BUTTON_3BBS_XPATH) self.inline_edit_controls = self._browser.elements( class_name="set-editable-group") # for Info Page if self.is_info_page: self.info_page_footer = base.Label(self.info_widget_elem, self._locators.TXT_FOOTER_CSS) self.modified_by = selenium_utils.get_when_visible( self.info_widget_elem, self._locators.TXT_MODIFIED_BY_CSS) _created_at_txt, _updated_at_txt = ( self.info_page_footer.text.split( string_utils.Symbols.WHITESPACE * 6)) self.created_at_txt = (re.sub(element.Common.CREATED_AT, string_utils.Symbols.BLANK, _created_at_txt)) self.updated_at_txt = (_updated_at_txt.splitlines()[2].replace( "on ", string_utils.Symbols.BLANK)) self._extend_list_all_scopes([ self._elements.CREATED_AT.upper(), self._elements.MODIFIED_BY.upper(), self._elements.UPDATED_AT.upper() ], [ self.created_at_txt, self.modified_by.text, self.updated_at_txt ]) # for Info Panel else: self.panel = ( SnapshotedInfoPanel(self._driver, self.info_widget_elem) if (self.child_cls_name.lower() in objects.ALL_SNAPSHOTABLE_OBJS and self.is_snapshoted_panel) else InfoPanel( self._driver, self.info_widget_elem)) # for tab controller if not self.is_snapshoted_panel: self.tab_container_elem = self.info_widget_elem.find_element( *self._locators.TAB_CONTAINER_CSS) self.tab_container = (tab_containers.AssessmentsTabContainer( self._driver, self.tab_container_elem) if self.is_asmts_info_widget else tab_containers.TabContainer( self._driver, self.tab_container_elem)) self.tab_container.tab_controller.active_tab = ( self.tab_container._elements.OBJ_TAB) # core element to find sub elements self.core_elem = (self.info_widget_elem if self.is_snapshoted_panel else self.tab_container.active_tab_elem) # for overridable methods self._extend_list_all_scopes_by_review_state() if not self.is_asmts_info_widget: self._extend_list_all_scopes_by_code() self.comment_area = self._comment_area() self.edit_popup = object_modal.get_modal_obj(self.obj_name, self._driver) self.top_tabs = page_tab.Tabs(self._browser, page_tab.Tabs.TOP) self.tabs = page_tab.Tabs(self._browser, page_tab.Tabs.INTERNAL)