def __retry_find(self, device: Device): # 计算重试次数 retry_count = int(float(self._timeout) / float(self._interval)) # 延迟查找元素 if self._delay: sleep(self._delay) # 重试次数小于1时,不重试,找不到直接抛异常 if retry_count < 1: xpath_selector = device.xpath(self._xpath) if xpath_selector.exists: xml_elements = xpath_selector.all() self._xpath_selector = xpath_selector self.extend(xml_elements) return self else: raise XPathElementNotFoundError(self._xpath) # 重试查找元素,元素存在时返回,找不到时重试直到timeout后抛出异常 for i in range(retry_count): if i > 0: sleep(self._interval) xpath_selector = device.xpath(self._xpath) if xpath_selector.exists: xml_elements = xpath_selector.all() self._xpath_selector = xpath_selector self.extend(xml_elements) return self raise XPathElementNotFoundError(self._xpath)
def _retry_find_xpath_element(self, xpath, **kwargs): from clickx3.u2.element import XPathElement delay = kwargs.pop('delay', 0.5) timeout = kwargs.pop('timeout', 10) interval = kwargs.pop('interval', 0.5) # 计算重试次数 retry_count = int(float(timeout) / float(interval)) # 延迟查找元素 if delay: time.sleep(delay) # 重试次数小于1时,不重试,找不到直接抛异常 if retry_count < 1: xpath_selector = self.xpath(xpath) if xpath_selector.exists: xml_element = xpath_selector.get() xml_element = xpath_selector.get() return XPathElement(xpath_selector=xpath_selector, xml_element=xml_element) else: raise XPathElementNotFoundError(xpath) # 重试查找元素,元素存在时返回,找不到时重试直到timeout后抛出异常 for i in range(retry_count): if i > 0: time.sleep(interval) xpath_selector = self.xpath(xpath) if xpath_selector.exists: xml_element = xpath_selector.get() return XPathElement(xpath_selector=xpath_selector, xml_element=xml_element) raise XPathElementNotFoundError(xpath)
def __retry_find(self, device: Device): # 计算重试次数 retry_count = int(float(self._timeout) / float(self._interval)) # 延迟查找元素 if self._delay: sleep(self._delay) # 重试次数小于1时,不重试,找不到直接抛异常 if retry_count < 1: if self._scroll_find: # 滚动查找 self._scroll_to_beginning( device) # 先返回页面顶部,因为scroll_to方法官网还没有加入循环滚动的逻辑 xml_element = device.xpath.scroll_to(self._xpath) if not xml_element: raise XPathElementNotFoundError(self._xpath) self._xpath_selector = None self.__dict__.update(xml_element.__dict__) return self else: # 非滚动查找 xpath_selector = device.xpath(self._xpath) if not xpath_selector.exists: raise XPathElementNotFoundError(self._xpath) xml_element = xpath_selector.get() self._xpath_selector = xpath_selector self.__dict__.update(xml_element.__dict__) return self # 重试查找元素,元素存在时返回,找不到时重试直到timeout后抛出异常 for i in range(retry_count): if i > 0: sleep(self._interval) if self._scroll_find: # 滚动查找 self._scroll_to_beginning( device) # 先返回页面顶部,因为scroll_to方法官网还没有加入循环滚动的逻辑 xml_element = device.xpath.scroll_to(self._xpath) if xml_element: self._xpath_selector = None self.__dict__.update(xml_element.__dict__) return self else: # 非滚动查找 xpath_selector = device.xpath(self._xpath) if xpath_selector.exists: xml_element = xpath_selector.get() self._xpath_selector = xpath_selector self.__dict__.update(xml_element.__dict__) return self raise XPathElementNotFoundError(self._xpath)
def get(self): """ Get first matched element Returns: XMLElement Raises: XPathElementNotFoundError """ if not self.wait(self._global_timeout): raise XPathElementNotFoundError(self._xpath) return self.get_last_match()
def get_text(self): """ get element text Returns: string of node text Raises: XPathElementNotFoundError """ if not self.wait(self._global_timeout): raise XPathElementNotFoundError(self._xpath) return self.all(self._last_source)[0].attrib.get("text", "")
def get(self, timeout=None): """ Get first matched element Args: timeout (float): max seconds to wait Returns: XMLElement Raises: XPathElementNotFoundError """ if not self.wait(timeout or self._global_timeout): raise XPathElementNotFoundError(self._xpath_list) return self.get_last_match()