uiautomator+python Android端上下滑寻找文本元素

  • 先指定上滑屏幕 方法swipe_up()
  • 下滑屏幕方法swipe_down()
    def swipe_up(self):
        w, h = self.d.window_size()
        self.d.swipe(w // 2, h // 2, w // 2, h * 1 // 5)
        self.sleep(1)

    def swipe_down(self):
        w, h = self.d.window_size()
        self.d.swipe(w // 2, h // 2, w // 2, h * 4 // 5)
        self.sleep(1)
  • 整体思路如下:先获取界面元素属性
  • 首先定义当前页面元素为page,如果为text在page里面表示找到文本,如果不在page则可以向下滑动,文本不存在就继续下滑,如果滑动前后俩次page元素相同表示已经到达底部/顶部
  • 此处先下滑,再上滑,是因为有些app端选项列表会自动定位到上一次已经选择的元素(因此可能位于中间段位置,我们需要上下都查找相关元素)
  • d = u2.connect()
  • 如果上下都未找到,则返回False
    def find_text(self, text, swipe=True):
        """
        查找页面元素
        :param text:
        :param swipe:
        :return:
        """
        log.info("查找页面元素【{}】".format(text))
        page = self.d.dump_hierarchy()
        if text in page:
            return True
        elif swipe:
            while swipe:
                page = self.d.dump_hierarchy()
                log.info("向下滑动一次")
                self.swipe_down()
                newpage = self.d.dump_hierarchy()
                if text in newpage:
                    return True
                if newpage == page:
                    log.info("滑到顶部了,没有找到元素,继续上滑")
                    while swipe:
                        page = self.d.dump_hierarchy()
                        log.info("向上滑动一次")
                        self.swipe_up()
                        newpage = self.d.dump_hierarchy()
                        if text in newpage:
                            return True
                        if newpage == page:
                            log.info("滑到底了,没有找到元素")
                            return False
        else:
            return False

 

posted @ 2023-04-18 15:50  陈文芝  阅读(170)  评论(0编辑  收藏  举报