def wait_for_button(self, button_text, **kwargs): logger.info("Waiting for the button %r", button_text) self.click_element( expand_path('//*[@containsClass="dijitButtonText"][text() = "%s"]') % (button_text,), **kwargs )
def add(self, portalname=None, hostname=None): if portalname is None: portalname = uts.random_string() self.open_add_dialog() # FIXME add this to the open_add_dialog() function self.selenium.enter_input_combobox('objectType', 'Portal: Portal') self.selenium.wait_until_standby_animation_appears_and_disappears() self.selenium.click_button('Next') self.selenium.wait_until_standby_animation_appears_and_disappears() self.selenium.enter_input("name", portalname) self.selenium.enter_input('__displayName-0-0', 'en_US') self.selenium.enter_input('__displayName-0-1', uts.random_string()) if hostname is not None: self.selenium.click_button( 'Add' ) # FIXME at the moment there is only 1 Add button on the screen self.selenium.wait_for_text('Add objects') self.selenium.wait_until_standby_animation_appears_and_disappears() self.selenium.click_checkbox_of_dojox_grid_entry(hostname) self.selenium.click_element( expand_path( '//*[@containsClass="dijitDialog"]//*[@containsClass="dijitButtonText"][text()="Add"]' )) self.selenium.wait_until_all_dialogues_closed() self.selenium.click_button(_("Create portal")) self.wait_for_main_grid_load() return portalname
def click_checkbox_of_dojox_grid_entry(self, name, **kwargs): # type: (str, **Any) -> None logger.info("Clicking the checkbox of the dojox grid entry %r", name) self.click_element( expand_path( '//*[@containsClass="dojoxGridCell"][@role="gridcell"][contains(text(), "%s")]/preceding-sibling::*[1]' ) % (name, ), **kwargs)
def click_button(self, button_text, xpath_prefix='', **kwargs): # type: (str, str, **Any) -> None logger.info("Clicking the button %r", button_text) xpath = '//*[@containsClass="dijitButtonText"][text() = "%s"]' % ( button_text, ) xpath = expand_path(xpath_prefix + xpath) self.click_element(xpath, **kwargs)
def click_side_menu_back(self): # type: () -> None self.click_element( expand_path( '//*[@containsClass="mobileMenu"]//*[@containsClass="menuSlideHeader"]' )) time.sleep(0.5)
def click_side_menu_entry(self, text): # type: (str) -> None self.click_element( expand_path( '//*[@containsClass="mobileMenu"]//*[@containsClass="menuItem"][contains(text(), "%s")]' ) % text) time.sleep(0.5)
def search_module(self, name, do_reload=True): # type: (str, bool) -> None if do_reload: self.driver.get(self.base_url + 'univention/management/?lang=%s' % (self.language, )) input_field = self.wait_for_element_by_css_selector( '.umcModuleSearch input.dijitInputInner') if not input_field.is_displayed(): self.click_element( expand_path( '//*[@containsClass="umcModuleSearchToggleButton"]')) limit = 60 while limit > 0: try: input_field.clear() break except selenium_exceptions.ElementNotInteractableException: if limit > 1: logger.info( "Item was not interactable, retrying after one second") time.sleep(1) limit -= 1 else: logger.info("Item was not interactable after 60 seconds.") raise input_field.send_keys(name) self.wait_for_text(_('Search query'))
def wait_until_all_standby_animations_disappeared(self, timeout=60): # type: (int) -> None logger.info("Waiting for all standby animations to disappear.") xpath = expand_path( '//*[contains(@id, "_Standby_")]//*[@containsClass="umcStandbySvgWrapper"]' ) webdriver.support.ui.WebDriverWait(xpath, timeout).until( self.elements_invisible, 'wait_until_all_standby_animations_disappeared(timeout=%r)' % (timeout, ))
def enter_input_combobox(self, inputname, inputvalue): # type: (str, str) -> None xpath = "//*[@role='combobox' and .//input[@name='{}']]//input[@role='textbox']".format(inputname) elems = webdriver.support.ui.WebDriverWait(xpath, 60).until( self.get_all_enabled_elements ) if len(elems) != 1: logger.warn("Found {!d} input elements instead of one. Try using the first one".format(len(elems))) elems[0].clear() elems[0].send_keys(inputvalue) xpath = expand_path('//*[@containsClass="dijitMenuItem"]/descendant-or-self::node()[contains(text(), "%s")]' % (inputvalue)) self.wait_until_element_visible(xpath) self.click_element(xpath)
def search_module(self, name, do_reload=True): if do_reload: self.driver.get(self.base_url + 'univention/management/?lang=%s' % (self.language,)) input_field_xpath = expand_path('//*[@containsClass="umcLiveSearch"]//input[@containsClass="dijitInputInner"]') self.wait_until( expected_conditions.presence_of_element_located( (webdriver.common.by.By.XPATH, input_field_xpath) ) ) input_field = self.driver.find_element_by_xpath(input_field_xpath) input_field.clear() input_field.send_keys(name) self.wait_for_text(_('Search query'))
def wait_until_standby_animation_appears(self, timeout=5): # type: (int) -> None logger.info("Waiting for standby animation to appear.") xpath = expand_path( '//*[contains(@id, "_Standby_")]//*[@containsClass="umcStandbySvgWrapper"]' ) try: webdriver.support.ui.WebDriverWait(xpath, timeout).until( self.elements_visible, 'wait_until_standby_animation_appears(timeout=%r)' % (timeout, )) except selenium_exceptions.TimeoutException: logger.info( "No standby animation appeared during timeout. Ignoring") else: logger.info("Found standby animation")
def close_side_menu(self): self.click_element( expand_path( '//*[@containsClass="mobileMenu"]//*[@containsClass="umcMobileMenuToggleButton"]' )) time.sleep(0.5)
def click_app_tile(self, app_name): # type: (str) -> None self.selenium.click_element( expand_path('//*[@containsClass="umcTile__name"][text() = "%s"]' % (app_name, )))
def close_side_menu(self): # type: () -> None self.click_element(expand_path('//*[@containsClass="umcMenuButton"]')) time.sleep(0.5)