Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
    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", "")
Ejemplo n.º 6
0
    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()