IOS 自动化没有找到滚动到元素可见,自己写一个记一下

    def Element_Scroll_To_Visibility(self, locator, fromX, fromY, toX, toY,
                                     by=MobileBy.IOS_PREDICATE, model=None):  # 将元素滚动到可见区域
        """
        将不可见元素滚动到可见区域
        :param locator: 元素表达式
        :param fromX: 起始位置X坐标倍数
        :param fromY: 起始位置Y坐标倍数
        :param toX: 终点位置X坐标的倍数
        :param toY: 终点位置Y坐标的倍数
        :param by: 元素定位方式
        :param model: 截图命名默认为None
        :return:
        """
        try:
            logging.info('开始滚动操作,一直到元素可见')
            while True:
                try:
                    WebDriverWait(self.driver, 1).until(EC.
                        visibility_of_element_located(
                        (by, locator)))
                    break
                except:
                    pass
                size = self.driver.get_window_size()
                self.driver.execute_script("mobile:dragFromToForDuration",
                                           {"duration": 0.5, "element": None, "fromX": size['width'] * fromX,
                                            "fromY": size['height'] * fromY, "toX": size['width'] * toX,
                                            "toY": size['height'] * toY})
        except:
            self._save_screenShot(model)
            logging.error('获取文本内容失败')
            raise

1 回帖
请输入回帖内容 ...
  • zeliang.yue

    因为 iOS 系统的元素可见和 Web 定位元素可见不一样。iOS 可见元素若是使用 name 或者其他属性进行下标定位肯定不行的,他只会显示可见区域的元素下标。若你下滑到新的区域相同元素,元素的下标还是从 0 开始。例如商品瀑布流。滚动建议 用 xpath。上面方法虽然看着讨巧简单,但够基本使用了,解决目前问题还是可以的。