def _test_expand_settings( self, expand_settings_elem: WebElement, settings_elem: WebElement, ) -> None: self.assertFalse(settings_elem.is_displayed()) expand_settings_elem.click() self.assertTrue(settings_elem.is_displayed())
def _scroll_to_elem(driver: WebDriver, elem: WebElement, y_delta=-70, step=70, verbose=False, stop_if_visible=True): prev_y = -1 while True: elem_y = elem.location['y'] target_y = elem.location['y'] + y_delta cur_y = driver.execute_script('return window.pageYOffset') if verbose: print( f'scroll_to_elem: target_y: {target_y} elem.displayed: {elem.is_displayed()} ' f'cur_y: {cur_y}') if abs(target_y - cur_y) < 50: driver.execute_script(f"window.scrollTo(0, {target_y})") prev_y = cur_y break elif (cur_y == prev_y) and elem.is_displayed() and elem.is_enabled(): break else: direction = +1.0 if (target_y - cur_y) >= 0 else -1.0 next_y = int(cur_y + direction * step * random.lognormvariate(0, 0.2)) driver.execute_script(f"window.scrollTo(0, {next_y})") prev_y = cur_y if should_stop(): break _human_wait(0.05)
def is_element_visible(self, element: WebElement) -> bool: """Return whether or not the specified element is currently visible. Args: element: """ return element.is_displayed()
def waitForDissappear( webelmnt: WebElement, counter:int=10 ): timer=0 while webelmnt.is_displayed()>-1: if timer>=counter: Log.write('Ошибка Ожидания исчезновения элемента '+webelmnt) return False time.sleep(1) timer+=1 return True
def is_element_exist(self, locator_type: By = None, locator_value: str = None, element: WebElement = None, from_element: WebElement = None, time_to_wait: int = TIME_TO_WAIT) -> bool: if not element: try: element = self.find_element_by(locator_type, locator_value, from_element, time_to_wait) except TimeoutException as e: return False return element.is_displayed()
def click(element: WebElement = None, element_parent: Union[None, WebDriver, WebElement] = None, locator: Locator = None, delay: Union[int, float] = None): """ Clicks on element. Repeats when it fails It is possible to provide element object directly or its parent object and locator. :param element: WebElement - if present, directly click on this WebElement :param element_parent: WebElement - if present first find the element to click on under this element/WebDriver object using locator parameter :param locator: locator tuple i.e. (By.CSS_SELECTOR, 'div.my-class') :param delay: optional delay between attempts """ for i in range(3, -1, -1): if locator and element_parent: try: element = element_parent.find_element(*locator) except WebDriverException as e: if i == 0: raise print("ERROR: cannot find element", e.args) sleep(0.5) continue if not element.is_displayed(): if i == 0: raise Exception('Element is not displayed') else: print('ERROR: element is not displayed') sleep(0.5) continue if not element.is_enabled(): if i == 0: raise Exception('Element is not enabled') else: print('ERROR: element is not enabled') sleep(0.5) continue try: sleep(0.5) element.click() if delay is not None: sleep(delay) break except WebDriverException as e: if i == 0: raise print("ERROR: cannot click on element", e.args)
def scroll_to(driver: WebDriver, element: WebElement): if "firefox" in driver.capabilities["browserName"].lower(): view_port_height = int( driver.execute_script("return window.innerHeight;")) vertical_position = int(element.location["y"]) if vertical_position > view_port_height: logging.debug(f"Scrolling to y={vertical_position}") driver.execute_script(f"window.scrollTo(0, {vertical_position});") else: logging.debug( f"Element is already positioned ({vertical_position}) within view_port " f"({view_port_height})") if not element.is_displayed(): logging.debug( f"Scrolling to element using scrollIntoView: {element}") driver.execute_script(f"arguments[0].scrollIntoView(true);", element) else: action_chains = ActionChains(driver) action_chains.move_to_element(element) action_chains.perform()
def scroll_to_element_if_not_visible(driver: WebDriver, element: WebElement, *, section: str = None, name: str = None): """Scroll to element only if it's not visible. Delaying scrolling to every element can save around 100ms per element. """ try: yield except TimeoutException as e: if section and name: logging.debug( f"Scrolling/Moving focus to '{section} → {name}' element") else: logging.warning( f"Element is not visible, will scroll to it & check it's visibility: " f"{e.msg}") scroll_to(driver, element) error = ( f"Element '{name or element.tag_name}' is not visible even after scrolling " f"to it") assert element.is_displayed(), error
def wait_displayed(element: WebElement): while not element.is_displayed(): sleep(1)
def check_if_element_is_visible(web_element: WebElement, element_name: str): """Check if provided web element is visible.""" with assertion_msg( f"Expected to see '{element_name}' element but it's not visible"): assert web_element.is_displayed()
def click_element(self, element: WebElement) -> None: if element.is_displayed(): element.click()
def input_text(self, element: WebElement, text: str) -> None: if element.is_displayed(): element.send_keys(text)
def matches(self, answer: WebElement) -> bool: if answer.is_displayed(): return True return False
def getTextA(elm:WebElement)->str: waitUntil(lambda: elm.is_displayed() and elm.text,30,1) return elm.text
def __call__(self, element: WebElement): """Return true if elements is displayed and false otherwise.""" return element.is_displayed()
def is_element_interactible(element: WebElement) -> bool: return element.is_displayed() and element.is_enabled()
def __is_valid_element(element: WebElement): assert (element is not None) assert element.is_displayed() is True, "element is not displayed on the page" assert element.is_enabled() is True, "element is not enabled"