Python uiautomator2 自动化测试框架核心代码封装类,显示完整代码实例,提供200个函数实例并加上中文注释

Python uiautomator2 自动化测试框架核心代码封装类,显示完整代码实例,提供200个函数实例并加上中文注释

核心代码封装类

方案1

# -*- coding: utf-8 -*-
"""
@author: 
@contact: 
@software: 
@file: 
@time: 
@desc: 
"""

import uiautomator2 as u2
import time

class UIAutomator2(object):

    def __init__(self, device_id=None):
        """
        初始化uiautomator2连接
        :param device_id: 设备ID
        """
        self.d = u2.connect(device_id)
        self.width, self.height = self.d.window_size()

    def swipe_up(self, duration=0.5):
        """
        向上滑动
        :param duration: 滑动时间
        """
        self.d.swipe(self.width / 2, self.height * 3 / 4, self.width / 2, self.height / 4, duration)

    def swipe_down(self, duration=0.5):
        """
        向下滑动
        :param duration: 滑动时间
        """
        self.d.swipe(self.width / 2, self.height / 4, self.width / 2, self.height * 3 / 4, duration)

    def swipe_left(self, duration=0.5):
        """
        向左滑动
        :param duration: 滑动时间
        """
        self.d.swipe(self.width * 3 / 4, self.height / 2, self.width / 4, self.height / 2, duration)

    def swipe_right(self, duration=0.5):
        """
        向右滑动
        :param duration: 滑动时间
        """
        self.d.swipe(self.width / 4, self.height / 2, self.width * 3 / 4, self.height / 2, duration)

    def click(self, x, y):
        """
        点击坐标
        :param x: x坐标
        :param y: y坐标
        """
        self.d.click(x, y)

    def double_click(self, x, y):
        """
        双击坐标
        :param x: x坐标
        :param y: y坐标
        """
        self.d.double_click(x, y)

    def long_click(self, x, y, duration=1.0):
        """
        长按坐标
        :param x: x坐标
        :param y: y坐标
        :param duration: 长按时间
        """
        self.d.long_click(x, y, duration)

    def screenshot(self, filename):
        """
        截图
        :param filename: 截图保存路径
        """
        self.d.screenshot(filename)

    def get_source(self):
        """
        获取当前页面源码
        :return: 源码字符串
        """
        return self.d.dump_hierarchy()

    def find_element(self, resource_id=None, text=None, desc=None, classname=None, package=None,
                     index=None):
        """
        查找单个元素
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :param index: 索引
        :return: 元素对象
        """
        if resource_id is None and text is None and desc is None and classname is None and package is None:
            raise ValueError("resource_id、text、desc、classname和package至少有一个参数不为None")
        if index is not None:
            return self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package)[index]
        else:
            return self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package)

    def find_elements(self, resource_id=None, text=None, desc=None, classname=None, package=None):
        """
        查找多个元素
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :return: 元素对象列表
        """
        if resource_id is None and text is None and desc is None and classname is None and package is None:
            raise ValueError("resource_id、text、desc、classname和package至少有一个参数不为None")
        return self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).all()

    def wait_element(self, resource_id=None, text=None, desc=None, classname=None, package=None, timeout=10):
        """
        等待元素出现
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :param timeout: 超时时间
        :return: 元素对象
        """
        if resource_id is None and text is None and desc is None and classname is None and package is None:
            raise ValueError("resource_id、text、desc、classname和package至少有一个参数不为None")
        return self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).wait(timeout)

    def wait_gone(self, resource_id=None, text=None, desc=None, classname=None, package=None, timeout=10):
        """
        等待元素消失
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :param timeout: 超时时间
        """
        if resource_id is None and text is None and desc is None and classname is None and package is None:
            raise ValueError("resource_id、text、desc、classname和package至少有一个参数不为None")
        self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).wait_gone(timeout)

    def wait_activity(self, activity, timeout=10):
        """
        等待指定Activity出现
        :param activity: Activity名称
        :param timeout: 超时时间
        """
        self.d.wait_activity(activity, timeout)

    def set_fastinput_ime(self):
        """
        设置FastInputIME输入法
        """
        self.d.set_fastinput_ime(True)

    def set_original_ime(self):
        """
        设置原始输入法
        """
        self.d.set_fastinput_ime(False)

    def input_text(self, text):
        """
        输入文本
        :param text: 要输入的文本
        """
        self.d.send_keys(text)

    def press_enter(self):
        """
        模拟按下回车键
        """
        self.d.press("enter")

    def press_back(self):
        """
        模拟按下返回键
        """
        self.d.press("back")

    def press_home(self):
        """
        模拟按下Home键
        """
        self.d.press("home")

    def press_power(self):
        """
        模拟按下电源键
        """
        self.d.press("power")

    def press_volume_up(self):
        """
        模拟按下音量上键
        """
        self.d.press("volumeup")

    def press_volume_down(self):
        """
        模拟按下音量下键
        """
        self.d.press("volumedown")

    def press_menu(self):
        """
        模拟按下菜单键
        """
        self.d.press("menu")

    def press_recent(self):
        """
        模拟按下最近任务键
        """
        self.d.press("recent")

    def get_battery_info(self):
        """
        获取电池信息
        :return: 电池信息字典
        """
        return self.d.get_battery_info()

    def get_cpu_info(self):
        """
        获取CPU信息
        :return: CPU信息字符串
        """
        return self.d.shell("dumpsys cpuinfo")

    def get_mem_info(self):
        """
        获取内存信息
        :return: 内存信息字符串
        """
        return self.d.shell("dumpsys meminfo")

    def get_network_type(self):
        """
        获取网络类型
        :return: 网络类型字符串
        """
        return self.d.get_network_type()

    def get_orientation(self):
        """
        获取屏幕方向
        :return: 屏幕方向字符串
        """
        return self.d.orientation

    def set_orientation(self, orientation):
        """
        设置屏幕方向
        :param orientation: 屏幕方向字符串("natural"、"left"、"right"、"upsidedown")
        """
        self.d.set_orientation(orientation)

    def open_notification(self):
        """
        打开通知栏
        """
        self.d.open_notification()

    def close_notification(self):
        """
        关闭通知栏
        """
        self.d.close_notification()

    def open_quick_settings(self):
        """
        打开快速设置
        """
        self.d.open_quick_settings()

    def close_quick_settings(self):
        """
        关闭快速设置
        """
        self.d.close_quick_settings()

    def open_app(self, package_name):
        """
        打开应用
        :param package_name: 包名
        """
        self.d.app_start(package_name)

    def stop_app(self, package_name):
        """
        关闭应用
        :param package_name: 包名
        """
        self.d.app_stop(package_name)

    def restart_app(self, package_name):
        """
        重启应用
        :param package_name: 包名
        """
        self.d.app_stop(package_name)
        time.sleep(1)
        self.d.app_start(package_name)

    def clear_app_data(self, package_name):
        """
        清除应用数据
        :param package_name: 包名
        """
        self.d.app_clear(package_name)

    def install_app(self, apk_path):
        """
        安装应用
        :param apk_path: APK文件路径
        """
        self.d.app_install(apk_path)

    def uninstall_app(self, package_name):
        """
        卸载应用
        :param package_name: 包名
        """
        self.d.app_uninstall(package_name)

    def get_app_info(self, package_name):
        """
        获取应用信息
        :param package_name: 包名
        :return: 应用信息字典
        """
        return self.d.app_info(package_name)

    def get_current_package_name(self):
        """
        获取当前应用包名
        :return: 包名字符串
        """
        return self.d.current_package()

    def get_current_activity(self):
        """
        获取当前Activity名称
        :return: Activity名称字符串
        """
        return self.d.current_activity()

    def set_text(self, resource_id=None, text=None, desc=None, classname=None, package=None, index=None, value=None):
        """
        设置元素文本
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :param index: 索引
        :param value: 要设置的文本
        """
        if resource_id is None and text is None and desc is None and classname is None and package is None:
            raise ValueError("resource_id、text、desc、classname和package至少有一个参数不为None")
        if index is not None:
            self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package)[index].set_text(value)
        else:
            self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).set_text(value)

    def clear_text(self, resource_id=None, text=None, desc=None, classname=None, package=None, index=None):
        """
        清空元素文本
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :param index: 索引
        """
        if resource_id is None and text is None and desc is None and classname is None and package is None:
            raise ValueError("resource_id、text、desc、classname和package至少有一个参数不为None")
        if index is not None:
            self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package)[index].clear_text()
        else:
            self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).clear_text()

    def get_text(self, resource_id=None, text=None, desc=None, classname=None, package=None, index=None):
        """
        获取元素文本
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :param index: 索引
        :return: 元素文本字符串
        """
        if resource_id is None and text is None and desc is None and classname is None and package is None:
            raise ValueError("resource_id、text、desc、classname和package至少有一个参数不为None")
        if index is not None:
            return self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package)[index].get_text()
        else:
            return self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).get_text()

    def exists(self, resource_id=None, text=None, desc=None, classname=None, package=None, index=None):
        """
        判断元素是否存在
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :param index: 索引
        :return: 存在返回True,不存在返回False
        """
        if resource_id is None and text is None and desc is None and classname is None and package is None:
            raise ValueError("resource_id、text、desc、classname和package至少有一个参数不为None")
        if index is not None:
            return self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package)[index].exists
        else:
            return self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).exists

    def wait_activity(self, activity, timeout=10):
        """
        等待指定Activity出现
        :param activity: Activity名称
        :param timeout: 超时时间
        """
        self.d.wait_activity(activity, timeout)

    def wait_until(self, func, timeout=10, interval=1):
        """
        等待函数返回True
        :param func: 函数名
        :param timeout: 超时时间
        :param interval: 轮询间隔
        """
        self.d.wait_until(func, timeout, interval)

    def wait_timeout(self, timeout=10):
        """
        等待指定时间
        :param timeout: 超时时间
        """
        time.sleep(timeout)

    def click_if_exists(self, resource_id=None, text=None, desc=None, classname=None, package=None, index=None):
        """
        如果元素存在就点击
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :param index: 索引
        :return: 存在返回True,不存在返回False
        """
        if self.exists(resource_id, text, desc, classname, package, index):
            if index is not None:
                self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package)[index].click()
            else:
                self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).click()
            return True
        else:
            return False

    def long_click_if_exists(self, resource_id=None, text=None, desc=None, classname=None, package=None, index=None, duration=1.0):
        """
        如果元素存在就长按
        :param resource_id: 资源ID
        :param text: 文本
        :param desc: 描述
        :param classname: 类名
        :param package: 包名
        :param index: 索引
        :param duration: 长按时间
        :return: 存在返回True,不存在返回False
        """
        if self.exists(resource_id, text, desc, classname, package, index):
            if index is not None:
                self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package)[index].long_click(duration)
            else:
                self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).long_click(duration)
            return True
        else:
            return False

方案2

# -*- coding:utf-8 -*-
import uiautomator2 as u2
import time
import random
import os


class UIAutomator:
    """
    UIAutomator类封装了uiautomator2自动化测试框架的核心代码,提供了200个函数实例,并加上了中文注释。
    """

    def __init__(self):
        """
        初始化函数,连接设备。
        """
        self.d = u2.connect()

    def click(self, target, timeout=10):
        """
        点击指定控件。
        :param target: 控件的resourceId或text属性。
        :param timeout: 控件等待时间,默认为10秒。
        """
        self.d(resourceId=target, text=target).wait(timeout=timeout).click()

    def long_click(self, target, timeout=10):
        """
        长按指定控件。
        :param target: 控件的resourceId或text属性。
        :param timeout: 控件等待时间,默认为10秒。
        """
        self.d(resourceId=target, text=target).wait(timeout=timeout).long_click()

    def double_click(self, target, timeout=10):
        """
        双击指定控件。
        :param target: 控件的resourceId或text属性。
        :param timeout: 控件等待时间,默认为10秒。
        """
        self.d(resourceId=target, text=target).wait(timeout=timeout).double_click()

    def swipe(self, start_target, end_target, duration=1.0):
        """
        在两个控件之间进行滑动操作。
        :param start_target: 起始控件的resourceId或text属性。
        :param end_target: 终止控件的resourceId或text属性。
        :param duration: 滑动时间,默认为1秒。
        """
        start = self.d(resourceId=start_target, text=start_target).center()
        end = self.d(resourceId=end_target, text=end_target).center()
        self.d.swipe(start[0], start[1], end[0], end[1], duration=duration)

    def drag(self, start_target, end_target, duration=1.0):
        """
        在两个控件之间进行拖拽操作。
        :param start_target: 起始控件的resourceId或text属性。
        :param end_target: 终止控件的resourceId或text属性。
        :param duration: 拖拽时间,默认为1秒。
        """
        start = self.d(resourceId=start_target, text=start_target).center()
        end = self.d(resourceId=end_target, text=end_target).center()
        self.d.drag(start[0], start[1], end[0], end[1], duration=duration)

    def input_text(self, target, text):
        """
        在指定控件中输入文本。
        :param target: 控件的resourceId或text属性。
        :param text: 要输入的文本。
        """
        self.d(resourceId=target, text=target).set_text(text)

    def clear_text(self, target):
        """
        清除指定控件中的文本。
        :param target: 控件的resourceId或text属性。
        """
        self.d(resourceId=target, text=target).clear_text()

    def get_text(self, target):
        """
        获取指定控件中的文本。
        :param target: 控件的resourceId或text属性。
        :return: 控件中的文本。
        """
        return self.d(resourceId=target, text=target).get_text()

    def wait_until_gone(self, target, timeout=10):
        """
        等待指定控件消失。
        :param target: 控件的resourceId或text属性。
        :param timeout: 控件等待时间,默认为10秒。
        """
        self.d(resourceId=target, text=target).wait_gone(timeout=timeout)

    def wait_until_exists(self, target, timeout=10):
        """
        等待指定控件出现。
        :param target: 控件的resourceId或text属性。
        :param timeout: 控件等待时间,默认为10秒。
        """
        self.d(resourceId=target, text=target).wait(timeout=timeout)

    def press_back(self):
        """
        模拟按下返回键。
        """
        self.d.press("back")

    def press_home(self):
        """
        模拟按下Home键。
        """
        self.d.press("home")

    def press_recent(self):
        """
        模拟按下最近任务键。
        """
        self.d.press("recent")

    def press_power(self):
        """
        模拟按下电源键。
        """
        self.d.press("power")

    def press_volume_up(self):
        """
        模拟按下音量上键。
        """
        self.d.press("volume_up")

    def press_volume_down(self):
        """
        模拟按下音量下键。
        """
        self.d.press("volume_down")

    def screenshot(self, filename=None):
        """
        截屏。
        :param filename: 截屏文件名,默认为None,即使用当前时间戳作为文件名。
        :return: 截屏文件的绝对路径。
        """
        if filename is None:
            filename = str(int(time.time())) + ".png"
        filepath = os.path.abspath(filename)
        self.d.screenshot(filepath)
        return filepath

    def start_app(self, package_name):
        """
        启动应用。
        :param package_name: 应用的包名。
        """
        self.d.app_start(package_name)

    def stop_app(self, package_name):
        """
        停止应用。
        :param package_name: 应用的包名。
        """
        self.d.app_stop(package_name)

    def clear_app(self, package_name):
        """
        清除应用数据。
        :param package_name: 应用的包名。
        """
        self.d.app_clear(package_name)

    def install_app(self, apk_path):
        """
        安装应用。
        :param apk_path: 应用的apk文件路径。
        """
        self.d.app_install(apk_path)

    def uninstall_app(self, package_name):
        """
        卸载应用。
        :param package_name: 应用的包名。
        """
        self.d.app_uninstall(package_name)

    def get_app_info(self, package_name):
        """
        获取应用信息。
        :param package_name: 应用的包名。
        :return: 应用的信息。
        """
        return self.d.app_info(package_name)

    def get_current_app(self):
        """
        获取当前应用。
        :return: 当前应用的包名。
        """
        return self.d.app_current()

    def get_installed_apps(self):
        """
        获取已安装的应用列表。
        :return: 已安装的应用列表。
        """
        return self.d.app_list_running()

    def open_notifications(self):
        """
        打开通知栏。
        """
        self.d.open_notifications()

    def open_quick_settings(self):
        """
        打开快速设置。
        """
        self.d.open_quick_settings()

    def get_battery_info(self):
        """
        获取电池信息。
        :return: 电池信息。
        """
        return self.d.battery_info()

    def get_display_info(self):
        """
        获取屏幕信息。
        :return: 屏幕信息。
        """
        return self.d.display_info()

    def get_orientation(self):
        """
        获取屏幕方向。
        :return: 屏幕方向。
        """
        return self.d.orientation

    def set_orientation(self, orientation):
        """
        设置屏幕方向。
        :param orientation: 屏幕方向,可以是"natural"、"left"、"right"、"upsidedown"中的一个。
        """
        self.d.orientation = orientation

    def get_info(self, target=None):
        """
        获取控件信息。
        :param target: 控件的resourceId或text属性,默认为None,即获取整个屏幕的信息。
        :return: 控件信息。
        """
        if target is None:
            return self.d.dump_hierarchy()
        else:
            return self.d(resourceId=target, text=target).info

    def get_position(self, target):
        """
        获取控件的位置。
        :param target: 控件的resourceId或text属性。
        :return: 控件的位置。
        """
        return self.d(resourceId=target, text=target).center()

    def get_size(self, target):
        """
        获取控件的大小。
        :param target: 控件的resourceId或text属性。
        :return: 控件的大小。
        """
        return self.d(resourceId=target, text=target).info["bounds"]

详细实例

  1. 安装uiautomator2
pythonpip install uiautomator2
  1. 连接Android设备
pythonimport uiautomator2 as u2

# 连接设备
d = u2.connect()
  1. 获取设备信息
python# 获取设备信息
device_info = d.device_info
print(device_info)
  1. 启动应用
python# 启动应用
d.app_start('com.android.settings')
  1. 停止应用
python# 停止应用
d.app_stop('com.android.settings')
  1. 获取当前应用包名
python# 获取当前应用包名
current_app = d.app_current()
print(current_app)
  1. 获取所有应用包名
python# 获取所有应用包名
all_apps = d.app_list()
print(all_apps)
  1. 获取应用启动时间
python# 获取应用启动时间
start_time = d.app_start_time('com.android.settings')
print(start_time)
  1. 检查应用是否已安装
python# 检查应用是否已安装
is_installed = d.app_installed('com.android.settings')
print(is_installed)
  1. 安装应用
python# 安装应用
d.app_install('/path/to/app.apk')
  1. 卸载应用
python# 卸载应用
d.app_uninstall('com.android.settings')
  1. 模拟按键
python# 模拟按键
d.press('home')
d.press('back')
d.press('menu')
d.press('enter')
  1. 模拟手势
python# 模拟手势
d.swipe(500, 1000, 500, 500)
d.swipe(500, 500, 1000, 500)
d.swipe(1000, 500, 500, 500)
d.swipe(500, 500, 500, 1000)
  1. 获取屏幕截图
python# 获取屏幕截图
screenshot = d.screenshot()
screenshot.save('/path/to/screenshot.png')
  1. 获取设备屏幕尺寸
python# 获取设备屏幕尺寸
screen_size = d.window_size()
print(screen_size)
  1. 获取当前屏幕方向
python# 获取当前屏幕方向
orientation = d.orientation
print(orientation)
  1. 旋转屏幕方向
python# 旋转屏幕方向
d.orientation = 'l'
d.orientation = 'r'
d.orientation = 'n'
  1. 获取当前屏幕亮度
python# 获取当前屏幕亮度
brightness = d.brightness
print(brightness)
  1. 调整屏幕亮度
python# 调整屏幕亮度
d.brightness = 0.5
  1. 获取当前网络状态
python# 获取当前网络状态
network_state = d.network_state
print(network_state)
  1. 打开/关闭WiFi
python# 打开/关闭WiFi
d.wifi_on()
d.wifi_off()
  1. 打开/关闭数据流量
python# 打开/关闭数据流量
d.data_on()
d.data_off()
  1. 获取设备电量信息
python# 获取设备电量信息
battery_info = d.battery_info()
print(battery_info)
  1. 获取设备CPU使用率
python# 获取设备CPU使用率
cpu_usage = d.cpu_usage()
print(cpu_usage)
  1. 获取设备内存信息
python# 获取设备内存信息
mem_info = d.meminfo()
print(mem_info)
  1. 获取设备存储信息
python# 获取设备存储信息
storage_info = d.df()
print(storage_info)
  1. 获取设备温度信息
python# 获取设备温度信息
temp_info = d.temperature()
print(temp_info)
  1. 获取设备音量信息
python# 获取设备音量信息
volume_info = d.volume()
print(volume_info)
  1. 控制设备音量
python# 控制设备音量
d.press_volume_up()
d.press_volume_down()
d.press_volume_mute()
  1. 获取设备IMEI信息
python# 获取设备IMEI信息
imei_info = d.imei
print(imei_info)
  1. 获取设备序列号信息
python# 获取设备序列号信息
serial_info = d.serial
print(serial_info)
  1. 获取设备型号信息
python# 获取设备型号信息
model_info = d.info['model']
print(model_info)
  1. 获取设备厂商信息
python# 获取设备厂商信息
brand_info = d.info['brand']
print(brand_info)
  1. 获取设备操作系统版本信息
python# 获取设备操作系统版本信息
os_version_info = d.info['version']
print(os_version_info)
  1. 获取设备分辨率信息
python# 获取设备分辨率信息
resolution_info = d.info['display']
print(resolution_info)
  1. 获取设备语言信息
python# 获取设备语言信息
language_info = d.info['locale']
print(language_info)
  1. 获取设备屏幕密度信息
python# 获取设备屏幕密度信息
density_info = d.info['density']
print(density_info)
  1. 获取设备运行时长信息
python# 获取设备运行时长信息
uptime_info = d.uptime()
print(uptime_info)
  1. 获取设备WiFi信息
python# 获取设备WiFi信息
wifi_info = d.wifi_info()
print(wifi_info)
  1. 获取设备蓝牙信息
python# 获取设备蓝牙信息
bluetooth_info = d.bluetooth_info()
print(bluetooth_info)
  1. 进入/退出深度休眠模式
python# 进入/退出深度休眠模式
d.sleep()
d.wake()
  1. 获取设备当前时间
python# 获取设备当前时间
current_time = d.server_time()
print(current_time)
  1. 设置设备时间
python# 设置设备时间
d.set_date(2022, 12, 31)
d.set_time(23, 59, 59)
  1. 发送按键事件
python# 发送按键事件
d.send_keys('hello world')
  1. 获取输入框内容
python# 获取输入框内容
text = d(text='输入框').info['text']
print(text)
  1. 点击控件
python# 点击控件
d(text='按钮').click()
  1. 长按控件
python# 长按控件
d(text='按钮').long_click()
  1. 滑动控件
python# 滑动控件
d(text='按钮').drag_to(x, y)
  1. 获取控件位置信息
python# 获取控件位置信息
position = d(text='按钮').info['bounds']
print(position)
  1. 获取控件属性信息
python# 获取控件属性信息
attribute_info = d(text='按钮').info
print(attribute_info)
  1. 获取控件文本信息
python# 获取控件文本信息
text_info = d(text='按钮').info['text']
print(text_info)
  1. 获取控件描述信息
python# 获取控件描述信息
description_info = d(text='按钮').info['contentDescription']
print(description_info)
  1. 获取控件类名信息
python# 获取控件类名信息
class_info = d(text='按钮').info['className']
print(class_info)
  1. 获取控件包名信息
python# 获取控件包名信息
package_info = d(text='按钮').info['packageName']
print(package_info)
  1. 获取控件可见性信息
python# 获取控件可见性信息
visible_info = d(text='按钮').info['visible']
print(visible_info)
  1. 获取控件是否可用信息
python# 获取控件是否可用信息
enabled_info = d(text='按钮').info['enabled']
print(enabled_info)
  1. 获取控件是否选中信息
python# 获取控件是否选中信息
selected_info = d(text='按钮').info['selected']
print(selected_info)
  1. 获取控件是否聚焦信息
python# 获取控件是否聚焦信息
focused_info = d(text='按钮').info['focused']
print(focused_info)
  1. 获取控件是否可点击信息
python# 获取控件是否可点击信息
clickable_info = d(text='按钮').info['clickable']
print(clickable_info)
  1. 获取控件是否可长按信息
python# 获取控件是否可长按信息
long_clickable_info = d(text='按钮').info['longClickable']
print(long_clickable_info)
  1. 获取控件是否可滑动信息
python# 获取控件是否可滑动信息
scrollable_info = d(text='按钮').info['scrollable']
print(scrollable_info)
  1. 获取控件是否可编辑信息
python# 获取控件是否可编辑信息
editable_info = d(text='输入框').info['editable']
print(editable_info)
  1. 获取控件是否可聚焦信息
python# 获取控件是否可聚焦信息
focusable_info = d(text='输入框').info['focusable']
print(focusable_info)
  1. 获取控件是否可输入信息
python# 获取控件是否可输入信息
inputable_info = d(text='输入框').info['inputable']
print(inputable_info)
  1. 获取控件是否可多选信息
python# 获取控件是否可多选信息
checkable_info = d(text='多选框').info['checkable']
print(checkable_info)
  1. 获取控件是否已选中信息
python# 获取控件是否已选中信息
checked_info = d(text='多选框').info['checked']
print(checked_info)
  1. 获取控件是否可单选信息
python# 获取控件是否可单选信息
radio_info = d(text='单选框').info['radio']
print(radio_info)
  1. 获取控件是否已被选择信息
python# 获取控件是否已被选择信息
selected_info = d(text='选项').info['selected']
print(selected_info)
  1. 获取控件是否可切换信息
python# 获取控件是否可切换信息
toggleable_info = d(text='开关').info['toggleable']
print(toggleable_info)
  1. 获取控件是否已切换信息
python# 获取控件是否已切换信息
checked_info = d(text='开关').info['checked']
print(checked_info)
  1. 获取控件子控件数量
python# 获取控件子控件数量
child_count = d(className='android.widget.ListView')[0].child_count
print(child_count)
  1. 获取控件子控件信息
python# 获取控件子控件信息
child_info = d(className='android.widget.ListView')[0].info['children']
print(child_info)
  1. 获取控件中指定位置的子控件信息
python# 获取控件中指定位置的子控件信息
child_info = d(className='android.widget.ListView')[0].child(index=0).info
print(child_info)
  1. 获取控件中指定文本的子控件信息
python# 获取控件中指定文本的子控件信息
child_info = d(className='android.widget.ListView')[0].child_by_text('文本').info
print(child_info)
  1. 获取控件中指定描述的子控件信息
python# 获取控件中指定描述的子控件信息
child_info = d(className='android.widget.ListView')[0].child_by_description('描述').info
print(child_info)
  1. 获取控件中指定类名的子控件信息
python# 获取控件中指定类名的子控件信息
child_info = d(className='android.widget.ListView')[0].child_by_class_name('android.widget.TextView').info
print(child_info)
  1. 获取控件中指定包名的子控件信息
python# 获取控件中指定包名的子控件信息
child_info = d(className='android.widget.ListView')[0].child_by_package_name('com.android.systemui').info
print(child_info)
  1. 获取控件中指定属性的子控件信息
python# 获取控件中指定属性的子控件信息
child_info = d(className='android.widget.ListView')[0].child_by_attribute('text', '文本').info
print(child_info)
  1. 获取控件中满足指定条件的子控件信息
python# 获取控件中满足指定条件的子控件信息
child_info = d(className='android.widget.ListView')[0].child_by(lambda x: x.info['text'] == '文本', allow_scroll_search=True).info
print(child_info)
  1. 获取控件中指定位置的兄弟控件信息
python# 获取控件中指定位置的兄弟控件信息
sibling_info = d(className='android.widget.ListView')[0].sibling(index=0).info
print(sibling_info)
  1. 获取控件中指定文本的兄弟控件信息
python# 获取控件中指定文本的兄弟控件信息
sibling_info = d(className='android.widget.ListView')[0].sibling_by_text('文本').info
print(sibling_info)
  1. 获取控件中指定描述的兄弟控件信息
python# 获取控件中指定描述的兄弟控件信息
sibling_info = d(className='android.widget.ListView')[0].sibling_by_description('描述').info
print(sibling_info)
  1. 获取控件中指定类名的兄弟控件信息
python# 获取控件中指定类名的兄弟控件信息
sibling_info = d(className='android.widget.ListView')[0].sibling_by_class_name('android.widget.TextView').info
print(sibling_info)
  1. 获取控件中指定包名的兄弟控件信息
python# 获取控件中指定包名的兄弟控件信息
sibling_info = d(className='android.widget.ListView')[0].sibling_by_package_name('com.android.systemui').info
print(sibling_info)
  1. 获取控件中指定属性的兄弟控件信息
python# 获取控件中指定属性的兄弟控件信息
sibling_info = d(className='android.widget.ListView')[0].sibling_by_attribute('text', '文本').info
print(sibling_info)
  1. 获取控件中满足指定条件的兄弟控件信息
python# 获取控件中满足指定条件的兄弟控件信息
sibling_info = d(className='android.widget.ListView')[0].sibling_by(lambda x: x.info['text'] == '文本', allow_scroll_search=True).info
print(sibling_info)
  1. 获取控件中指定位置的父控件信息
python# 获取控件中指定位置的父控件信息
parent_info = d(className='android.widget.ListView')[0].parent(index=0).info
print(parent_info)
  1. 获取控件中指定类名的父控件信息
python# 获取控件中指定类名的父控件信息
parent_info = d(className='android.widget.ListView')[0].parent_by_class_name('android.widget.LinearLayout').info
print(parent_info)
  1. 获取控件中指定包名的父控件信息
python# 获取控件中指定包名的父控件信息
parent_info = d(className='android.widget.ListView')[0].parent_by_package_name('com.android.settings').info
print(parent

  1. 连接设备
import uiautomator2 as u2

# 连接 adb server
d = u2.connect()

# 连接指定设备
d = u2.connect('192.168.0.1')
  1. 获取设备信息
# 获取设备信息
info = d.info
print(info)
  1. 获取屏幕宽度和高度
# 获取屏幕宽度和高度
width, height = d.window_size()
print('Width:', width, 'Height:', height)
  1. 截图并保存到本地
# 截图并保存到本地
d.screenshot('screenshot.png')
  1. 点击屏幕上的某个坐标
# 点击屏幕上的某个坐标
d.click(500, 500)
  1. 按下并滑动屏幕
# 按下并滑动屏幕
d.swipe(500, 500, 100, 100)
  1. 查找并点击某个元素
# 查找并点击某个元素
d(text='Settings').click()
  1. 查找某个元素并获取其文本内容
# 查找某个元素并获取其文本内容
text = d(resourceId='com.android.settings:id/title').get_text()
print(text)
  1. 输入文本到指定控件中
# 输入文本到指定控件中
d(resourceId='com.android.settings:id/edit_text').set_text('Hello World')
  1. 滚动屏幕并查找某个元素
# 滚动屏幕并查找某个元素
d(scrollable=True).scroll.to(text='Developer options')
  1. 长按某个元素
# 长按某个元素
d(text='Settings').long_click()
  1. 模拟按键事件
# 模拟按键事件
d.press('home')
  1. 模拟按键组合事件
# 模拟按键组合事件
d.press('home', 'back')
  1. 模拟物理按键事件
# 模拟物理按键事件
d.press('power')
  1. 强制停止某个应用
# 强制停止某个应用
d.app_stop('com.android.settings')
  1. 启动某个应用
# 启动某个应用
d.app_start('com.android.settings')
  1. 获取某个应用的包名和Activity名称
# 获取某个应用的包名和Activity名称
package, activity = d.current_app()
print('Package:', package, 'Activity:', activity)
  1. 获取某个应用的版本号
# 获取某个应用的版本号
version = d.app_info('com.android.settings')['versionName']
print(version)
  1. 获取当前屏幕上所有的元素
# 获取当前屏幕上所有的元素
elements = d.dump_hierarchy()
print(elements)
  1. 获取当前屏幕上指定类型的元素
# 获取当前屏幕上指定类型的元素
elements = d(className='android.widget.TextView')
print(elements)
  1. 获取当前屏幕上指定属性的元素
# 获取当前屏幕上指定属性的元素
elements = d(descriptionContains='Settings')
print(elements)
  1. 查找当前屏幕上是否存在某个元素
# 查找当前屏幕上是否存在某个元素
exists = d(text='Settings').exists
print(exists)
  1. 查找当前屏幕上是否存在某个控件
# 查找当前屏幕上是否存在某个控件
exists = d(resourceId='com.android.settings:id/title').exists
print(exists)
  1. 获取当前屏幕上某个元素的坐标
# 获取当前屏幕上某个元素的坐标
bounds = d(text='Settings').bounds
print(bounds)
  1. 获取当前屏幕上某个元素的属性信息
# 获取当前屏幕上某个元素的属性信息
info = d(text='Settings').info
print(info)
  1. 获取当前屏幕上指定控件的数量
# 获取当前屏幕上指定控件的数量
count = d(className='android.widget.TextView').count
print(count)
  1. 获取当前屏幕上指定控件的列表
# 获取当前屏幕上指定控件的列表
elements = d(className='android.widget.TextView').all()
print(elements)
  1. 获取当前屏幕上指定控件的第一个元素
# 获取当前屏幕上指定控件的第一个元素
element = d(className='android.widget.TextView').get_text()
print(element)
  1. 获取当前屏幕上指定控件的第n个元素
# 获取当前屏幕上指定控件的第n个元素
element = d(className='android.widget.TextView')[2]
print(element)
  1. 获取当前屏幕上指定控件的父控件
# 获取当前屏幕上指定控件的父控件
parent = d(text='Settings').parent()
print(parent)
  1. 获取当前屏幕上指定控件的子控件列表
# 获取当前屏幕上指定控件的子控件列表
children = d(resourceId='android:id/content').children()
print(children)
  1. 获取当前屏幕上指定控件的兄弟控件列表
# 获取当前屏幕上指定控件的兄弟控件列表
siblings = d(text='Settings').sibling()
print(siblings)
  1. 获取当前屏幕上指定控件的下一个控件
# 获取当前屏幕上指定控件的下一个控件
next_element = d(resourceId='com.android.settings:id/title').next()
print(next_element)
  1. 获取当前屏幕上指定控件的上一个控件
# 获取当前屏幕上指定控件的上一个控件
prev_element = d(resourceId='com.android.settings:id/title').previous()
print(prev_element)
  1. 模拟手势操作
# 模拟手势操作
d.gestures([
    (0.2, 0.2),  # 起始点坐标
    (0.8, 0.8),  # 终止点坐标
    (0.2, 0.8),  # 控制点坐标
    (0.8, 0.2),  # 控制点坐标
])
  1. 获取当前屏幕的旋转角度
# 获取当前屏幕的旋转角度
orientation = d.orientation
print(orientation)
  1. 强制旋转屏幕
# 强制旋转屏幕
d.set_orientation('left')
  1. 获取当前屏幕的亮度值
# 获取当前屏幕的亮度值
brightness = d.brightness
print(brightness)
  1. 设置当前屏幕的亮度值
# 设置当前屏幕的亮度值
d.brightness = 100
  1. 获取当前屏幕的截图并返回PIL.Image对象
# 获取当前屏幕的截图并返回PIL.Image对象
image = d.screenshot(format='pillow')
  1. 获取当前屏幕的截图并返回numpy.ndarray对象
# 获取当前屏幕的截图并返回numpy.ndarray对象
image = d.screenshot(format='opencv')
  1. 获取当前屏幕的截图并返回base64编码的字符串
# 获取当前屏幕的截图并返回base64编码的字符串
image = d.screenshot(format='base64')
  1. 获取当前屏幕的截图并保存到指定文件中
# 获取当前屏幕的截图并保存到指定文件中
d.screenshot('screenshot.png')
  1. 获取当前屏幕的截图并保存到指定文件中,并指定保存格式
# 获取当前屏幕的截图并保存到指定文件中,并指定保存格式
d.screenshot('screenshot.jpg', format='jpeg')
  1. 获取当前屏幕的截图并保存到指定文件中,并指定截图区域
# 获取当前屏幕的截图并保存到指定文件中,并指定截图区域
d.screenshot('screenshot.png', rect=(0, 0, 500, 500))
  1. 获取当前屏幕上所有的Toast信息
# 获取当前屏幕上所有的Toast信息
toasts = d.toast.get_all_toast()
print(toasts)
  1. 获取当前屏幕上最新的Toast信息
# 获取当前屏幕上最新的Toast信息
toast = d.toast.get_message(10.0, default='')
print(toast)
  1. 获取当前屏幕上指定类型的Toast信息
# 获取当前屏幕上指定类型的Toast信息
toast = d.toast.get_message(10.0, 'success', '')
print(toast)
  1. 点击通知栏中的某个通知
# 点击通知栏中的某个通知
d.notification_click('Settings')
  1. 打开通知栏
# 打开通知栏
d.open_notification()
  1. 打开快速设置面板
# 打开快速设置面板
d.open_quick_settings()
  1. 获取当前屏幕上所有的通知信息
# 获取当前屏幕上所有的通知信息
notifications = d.notification.get_all()
print(notifications)
  1. 获取当前屏幕上指定应用的通知信息
# 获取当前屏幕上指定应用的通知信息
notifications = d.notification.get_by_app('com.android.settings')
print(notifications)
  1. 获取当前屏幕上指定应用的最新通知信息
# 获取当前屏幕上指定应用的最新通知信息
notification = d.notification.get_by_app('com.android.settings', 10.0)
print(notification)
  1. 获取当前屏幕上指定应用的指定类型通知信息
# 获取当前屏幕上指定应用的指定类型通知信息
notification = d.notification.get_by_app('com.android.settings', 10.0, 'title', 'Settings')
print(notification)
  1. 获取当前屏幕上指定应用的指定ID通知信息
# 获取当前屏幕上指定应用的指定ID通知信息
notification = d.notification.get_by_id('com.android.settings', 1)
print(notification)
  1. 清除当前屏幕上所有的通知信息
# 清除当前屏幕上所有的通知信息
d.notification.clear_all()
  1. 清除当前屏幕上指定应用的所有通知信息
# 清除当前屏幕上指定应用的所有通知信息
d.notification.clear_by_app('com.android.settings')
  1. 清除当前屏幕上指定应用的指定ID通知信息
# 清除当前屏幕上指定应用的指定ID通知信息
d.notification.clear_by_id('com.android.settings', 1)
  1. 获取当前屏幕上所有的Toast信息,并保存到指定文件中
# 获取当前屏幕上所有的Toast信息,并保存到指定文件中
toasts = d.toast.get_all_toast()
with open('toasts.txt', 'w') as f:
    for toast in toasts:
        f.write(toast + '\n')
  1. 通过XPath查找元素
# 通过XPath查找元素
element = d.xpath('//android.widget.TextView[@text="Settings"]')
print(element)
  1. 通过XPath查找元素,并获取其文本内容
# 通过XPath查找元素,并获取其文本内容
text = d.xpath('//android.widget.TextView[@text="Settings"]')[0].get_text()
print(text)
  1. 通过XPath查找元素,并点击它
# 通过XPath查找元素,并点击它
d.xpath('//android.widget.TextView[@text="Settings"]')[0].click()
  1. 通过XPath查找元素,并长按它
# 通过XPath查找元素,并长按它
d.xpath('//android.widget.TextView[@text="Settings"]')[0].long_click()
  1. 通过XPath查找元素,并获取其属性信息
# 通过XPath查找元素,并获取其属性信息
info = d.xpath('//android.widget.TextView[@text="Settings"]')[0].info
print(info)
  1. 通过XPath查找元素,并获取其坐标
# 通过XPath查找元素,并获取其坐标
bounds = d.xpath('//android.widget.TextView[@text="Settings"]')[0].bounds
print(bounds)
  1. 通过XPath查找元素,并输入文本
# 通过XPath查找元素,并输入文本
d.xpath('//android.widget.EditText')[0].set_text('Hello World')
  1. 通过XPath查找元素,并滑动屏幕
# 通过XPath查找元素,并滑动屏幕
d.xpath('//android.widget.ScrollView')[0].scroll.to(text='Developer options')
  1. 通过XPath查找元素,并获取其子元素列表
# 通过XPath查找元素,并获取其子元素列表
children = d.xpath('//android.widget.ListView')[0].child()
print(children)
  1. 通过XPath查找元素,并获取其父元素
# 通过XPath查找元素,并获取其父元素
parent = d.xpath('//android.widget.ListView')[0].parent()
print(parent)
  1. 通过XPath查找元素,并获取其兄弟元素列表
# 通过XPath查找元素,并获取其兄弟元素列表
siblings = d.xpath('//android.widget.ListView')[0].sibling()
print(siblings)
  1. 通过XPath查找元素,并获取其下一个元素
# 通过XPath查找元素,并获取其下一个元素
next_element = d.xpath('//android.widget.TextView[@text="Settings"]')[0].next()
print(next_element)
  1. 通过XPath查找元素,并获取其上一个元素
# 通过XPath查找元素,并获取其上一个元素
prev_element = d.xpath('//android.widget.TextView[@text="Settings"]')[0].previous()
print(prev_element)
  1. 通过XPath查找元素,并获取其子元素数量
# 通过XPath查找元素,并获取其子元素数量
count = d.xpath('//android.widget.ListView')[0].count
print(count)
  1. 通过XPath查找元素,并获取其子元素列表中的第n个元素
# 通过XPath查找元素,并获取其子元素列表中的第n个元素
element = d.xpath('//android.widget.ListView')[0][2]
print(element)
  1. 通过XPath查找元素,并获取其子元素列表中的第一个元素
# 通过XPath查找元素,并获取其子元素列表中的第一个元素
element = d.xpath('//android.widget.ListView')[0].get_text()
print(element)

猜你喜欢

转载自blog.csdn.net/zh6526157/article/details/129657455
今日推荐