1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python uiautomator2 自动化测试框架核心代码封装类 显示完整代码实例 提供200个

Python uiautomator2 自动化测试框架核心代码封装类 显示完整代码实例 提供200个

时间:2023-10-30 19:30:55

相关推荐

Python uiautomator2 自动化测试框架核心代码封装类 显示完整代码实例 提供200个

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

核心代码封装类

方案1

# -*- coding: utf-8 -*-"""@author: @contact: @software: @file: @time: @desc: """import uiautomator2 as u2import timeclass 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.orientationdef 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].existselse:return self.d(resourceId=resource_id, text=text, description=desc, className=classname, packageName=package).existsdef 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 Trueelse:return Falsedef 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 Trueelse:return False

方案2

# -*- coding:utf-8 -*-import uiautomator2 as u2import timeimport randomimport osclass 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 filepathdef 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.orientationdef set_orientation(self, orientation):"""设置屏幕方向。:param orientation: 屏幕方向,可以是"natural"、"left"、"right"、"upsidedown"中的一个。"""self.d.orientation = orientationdef 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).infodef 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"]

详细实例

安装uiautomator2

pythonpip install uiautomator2

连接Android设备

pythonimport uiautomator2 as u2# 连接设备d = u2.connect()

获取设备信息

python# 获取设备信息device_info = d.device_infoprint(device_info)

启动应用

python# 启动应用d.app_start('com.android.settings')

停止应用

python# 停止应用d.app_stop('com.android.settings')

获取当前应用包名

python# 获取当前应用包名current_app = d.app_current()print(current_app)

获取所有应用包名

python# 获取所有应用包名all_apps = d.app_list()print(all_apps)

获取应用启动时间

python# 获取应用启动时间start_time = d.app_start_time('com.android.settings')print(start_time)

检查应用是否已安装

python# 检查应用是否已安装is_installed = d.app_installed('com.android.settings')print(is_installed)

安装应用

python# 安装应用d.app_install('/path/to/app.apk')

卸载应用

python# 卸载应用d.app_uninstall('com.android.settings')

模拟按键

python# 模拟按键d.press('home')d.press('back')d.press('menu')d.press('enter')

模拟手势

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)

获取屏幕截图

python# 获取屏幕截图screenshot = d.screenshot()screenshot.save('/path/to/screenshot.png')

获取设备屏幕尺寸

python# 获取设备屏幕尺寸screen_size = d.window_size()print(screen_size)

获取当前屏幕方向

python# 获取当前屏幕方向orientation = d.orientationprint(orientation)

旋转屏幕方向

python# 旋转屏幕方向d.orientation = 'l'd.orientation = 'r'd.orientation = 'n'

获取当前屏幕亮度

python# 获取当前屏幕亮度brightness = d.brightnessprint(brightness)

调整屏幕亮度

python# 调整屏幕亮度d.brightness = 0.5

获取当前网络状态

python# 获取当前网络状态network_state = work_stateprint(network_state)

打开/关闭WiFi

python# 打开/关闭WiFid.wifi_on()d.wifi_off()

打开/关闭数据流量

python# 打开/关闭数据流量d.data_on()d.data_off()

获取设备电量信息

python# 获取设备电量信息battery_info = d.battery_info()print(battery_info)

获取设备CPU使用率

python# 获取设备CPU使用率cpu_usage = d.cpu_usage()print(cpu_usage)

获取设备内存信息

python# 获取设备内存信息mem_info = d.meminfo()print(mem_info)

获取设备存储信息

python# 获取设备存储信息storage_info = d.df()print(storage_info)

获取设备温度信息

python# 获取设备温度信息temp_info = d.temperature()print(temp_info)

获取设备音量信息

python# 获取设备音量信息volume_info = d.volume()print(volume_info)

控制设备音量

python# 控制设备音量d.press_volume_up()d.press_volume_down()d.press_volume_mute()

获取设备IMEI信息

python# 获取设备IMEI信息imei_info = d.imeiprint(imei_info)

获取设备序列号信息

python# 获取设备序列号信息serial_info = d.serialprint(serial_info)

获取设备型号信息

python# 获取设备型号信息model_info = d.info['model']print(model_info)

获取设备厂商信息

python# 获取设备厂商信息brand_info = d.info['brand']print(brand_info)

获取设备操作系统版本信息

python# 获取设备操作系统版本信息os_version_info = d.info['version']print(os_version_info)

获取设备分辨率信息

python# 获取设备分辨率信息resolution_info = d.info['display']print(resolution_info)

获取设备语言信息

python# 获取设备语言信息language_info = d.info['locale']print(language_info)

获取设备屏幕密度信息

python# 获取设备屏幕密度信息density_info = d.info['density']print(density_info)

获取设备运行时长信息

python# 获取设备运行时长信息uptime_info = d.uptime()print(uptime_info)

获取设备WiFi信息

python# 获取设备WiFi信息wifi_info = d.wifi_info()print(wifi_info)

获取设备蓝牙信息

python# 获取设备蓝牙信息bluetooth_info = d.bluetooth_info()print(bluetooth_info)

进入/退出深度休眠模式

python# 进入/退出深度休眠模式d.sleep()d.wake()

获取设备当前时间

python# 获取设备当前时间current_time = d.server_time()print(current_time)

设置设备时间

python# 设置设备时间d.set_date(, 12, 31)d.set_time(23, 59, 59)

发送按键事件

python# 发送按键事件d.send_keys('hello world')

获取输入框内容

python# 获取输入框内容text = d(text='输入框').info['text']print(text)

点击控件

python# 点击控件d(text='按钮').click()

长按控件

python# 长按控件d(text='按钮').long_click()

滑动控件

python# 滑动控件d(text='按钮').drag_to(x, y)

获取控件位置信息

python# 获取控件位置信息position = d(text='按钮').info['bounds']print(position)

获取控件属性信息

python# 获取控件属性信息attribute_info = d(text='按钮').infoprint(attribute_info)

获取控件文本信息

python# 获取控件文本信息text_info = d(text='按钮').info['text']print(text_info)

获取控件描述信息

python# 获取控件描述信息description_info = d(text='按钮').info['contentDescription']print(description_info)

获取控件类名信息

python# 获取控件类名信息class_info = d(text='按钮').info['className']print(class_info)

获取控件包名信息

python# 获取控件包名信息package_info = d(text='按钮').info['packageName']print(package_info)

获取控件可见性信息

python# 获取控件可见性信息visible_info = d(text='按钮').info['visible']print(visible_info)

获取控件是否可用信息

python# 获取控件是否可用信息enabled_info = d(text='按钮').info['enabled']print(enabled_info)

获取控件是否选中信息

python# 获取控件是否选中信息selected_info = d(text='按钮').info['selected']print(selected_info)

获取控件是否聚焦信息

python# 获取控件是否聚焦信息focused_info = d(text='按钮').info['focused']print(focused_info)

获取控件是否可点击信息

python# 获取控件是否可点击信息clickable_info = d(text='按钮').info['clickable']print(clickable_info)

获取控件是否可长按信息

python# 获取控件是否可长按信息long_clickable_info = d(text='按钮').info['longClickable']print(long_clickable_info)

获取控件是否可滑动信息

python# 获取控件是否可滑动信息scrollable_info = d(text='按钮').info['scrollable']print(scrollable_info)

获取控件是否可编辑信息

python# 获取控件是否可编辑信息editable_info = d(text='输入框').info['editable']print(editable_info)

获取控件是否可聚焦信息

python# 获取控件是否可聚焦信息focusable_info = d(text='输入框').info['focusable']print(focusable_info)

获取控件是否可输入信息

python# 获取控件是否可输入信息inputable_info = d(text='输入框').info['inputable']print(inputable_info)

获取控件是否可多选信息

python# 获取控件是否可多选信息checkable_info = d(text='多选框').info['checkable']print(checkable_info)

获取控件是否已选中信息

python# 获取控件是否已选中信息checked_info = d(text='多选框').info['checked']print(checked_info)

获取控件是否可单选信息

python# 获取控件是否可单选信息radio_info = d(text='单选框').info['radio']print(radio_info)

获取控件是否已被选择信息

python# 获取控件是否已被选择信息selected_info = d(text='选项').info['selected']print(selected_info)

获取控件是否可切换信息

python# 获取控件是否可切换信息toggleable_info = d(text='开关').info['toggleable']print(toggleable_info)

获取控件是否已切换信息

python# 获取控件是否已切换信息checked_info = d(text='开关').info['checked']print(checked_info)

获取控件子控件数量

python# 获取控件子控件数量child_count = d(className='android.widget.ListView')[0].child_countprint(child_count)

获取控件子控件信息

python# 获取控件子控件信息child_info = d(className='android.widget.ListView')[0].info['children']print(child_info)

获取控件中指定位置的子控件信息

python# 获取控件中指定位置的子控件信息child_info = d(className='android.widget.ListView')[0].child(index=0).infoprint(child_info)

获取控件中指定文本的子控件信息

python# 获取控件中指定文本的子控件信息child_info = d(className='android.widget.ListView')[0].child_by_text('文本').infoprint(child_info)

获取控件中指定描述的子控件信息

python# 获取控件中指定描述的子控件信息child_info = d(className='android.widget.ListView')[0].child_by_description('描述').infoprint(child_info)

获取控件中指定类名的子控件信息

python# 获取控件中指定类名的子控件信息child_info = d(className='android.widget.ListView')[0].child_by_class_name('android.widget.TextView').infoprint(child_info)

获取控件中指定包名的子控件信息

python# 获取控件中指定包名的子控件信息child_info = d(className='android.widget.ListView')[0].child_by_package_name('com.android.systemui').infoprint(child_info)

获取控件中指定属性的子控件信息

python# 获取控件中指定属性的子控件信息child_info = d(className='android.widget.ListView')[0].child_by_attribute('text', '文本').infoprint(child_info)

获取控件中满足指定条件的子控件信息

python# 获取控件中满足指定条件的子控件信息child_info = d(className='android.widget.ListView')[0].child_by(lambda x: x.info['text'] == '文本', allow_scroll_search=True).infoprint(child_info)

获取控件中指定位置的兄弟控件信息

python# 获取控件中指定位置的兄弟控件信息sibling_info = d(className='android.widget.ListView')[0].sibling(index=0).infoprint(sibling_info)

获取控件中指定文本的兄弟控件信息

python# 获取控件中指定文本的兄弟控件信息sibling_info = d(className='android.widget.ListView')[0].sibling_by_text('文本').infoprint(sibling_info)

获取控件中指定描述的兄弟控件信息

python# 获取控件中指定描述的兄弟控件信息sibling_info = d(className='android.widget.ListView')[0].sibling_by_description('描述').infoprint(sibling_info)

获取控件中指定类名的兄弟控件信息

python# 获取控件中指定类名的兄弟控件信息sibling_info = d(className='android.widget.ListView')[0].sibling_by_class_name('android.widget.TextView').infoprint(sibling_info)

获取控件中指定包名的兄弟控件信息

python# 获取控件中指定包名的兄弟控件信息sibling_info = d(className='android.widget.ListView')[0].sibling_by_package_name('com.android.systemui').infoprint(sibling_info)

获取控件中指定属性的兄弟控件信息

python# 获取控件中指定属性的兄弟控件信息sibling_info = d(className='android.widget.ListView')[0].sibling_by_attribute('text', '文本').infoprint(sibling_info)

获取控件中满足指定条件的兄弟控件信息

python# 获取控件中满足指定条件的兄弟控件信息sibling_info = d(className='android.widget.ListView')[0].sibling_by(lambda x: x.info['text'] == '文本', allow_scroll_search=True).infoprint(sibling_info)

获取控件中指定位置的父控件信息

python# 获取控件中指定位置的父控件信息parent_info = d(className='android.widget.ListView')[0].parent(index=0).infoprint(parent_info)

获取控件中指定类名的父控件信息

python# 获取控件中指定类名的父控件信息parent_info = d(className='android.widget.ListView')[0].parent_by_class_name('android.widget.LinearLayout').infoprint(parent_info)

获取控件中指定包名的父控件信息

python# 获取控件中指定包名的父控件信息parent_info = d(className='android.widget.ListView')[0].parent_by_package_name('com.android.settings').infoprint(parent

连接设备

import uiautomator2 as u2# 连接 adb serverd = u2.connect()# 连接指定设备d = u2.connect('192.168.0.1')

获取设备信息

# 获取设备信息info = d.infoprint(info)

获取屏幕宽度和高度

# 获取屏幕宽度和高度width, height = d.window_size()print('Width:', width, 'Height:', height)

截图并保存到本地

# 截图并保存到本地d.screenshot('screenshot.png')

点击屏幕上的某个坐标

# 点击屏幕上的某个坐标d.click(500, 500)

按下并滑动屏幕

# 按下并滑动屏幕d.swipe(500, 500, 100, 100)

查找并点击某个元素

# 查找并点击某个元素d(text='Settings').click()

查找某个元素并获取其文本内容

# 查找某个元素并获取其文本内容text = d(resourceId='com.android.settings:id/title').get_text()print(text)

输入文本到指定控件中

# 输入文本到指定控件中d(resourceId='com.android.settings:id/edit_text').set_text('Hello World')

滚动屏幕并查找某个元素

# 滚动屏幕并查找某个元素d(scrollable=True).scroll.to(text='Developer options')

长按某个元素

# 长按某个元素d(text='Settings').long_click()

模拟按键事件

# 模拟按键事件d.press('home')

模拟按键组合事件

# 模拟按键组合事件d.press('home', 'back')

模拟物理按键事件

# 模拟物理按键事件d.press('power')

强制停止某个应用

# 强制停止某个应用d.app_stop('com.android.settings')

启动某个应用

# 启动某个应用d.app_start('com.android.settings')

获取某个应用的包名和Activity名称

# 获取某个应用的包名和Activity名称package, activity = d.current_app()print('Package:', package, 'Activity:', activity)

获取某个应用的版本号

# 获取某个应用的版本号version = d.app_info('com.android.settings')['versionName']print(version)

获取当前屏幕上所有的元素

# 获取当前屏幕上所有的元素elements = d.dump_hierarchy()print(elements)

获取当前屏幕上指定类型的元素

# 获取当前屏幕上指定类型的元素elements = d(className='android.widget.TextView')print(elements)

获取当前屏幕上指定属性的元素

# 获取当前屏幕上指定属性的元素elements = d(descriptionContains='Settings')print(elements)

查找当前屏幕上是否存在某个元素

# 查找当前屏幕上是否存在某个元素exists = d(text='Settings').existsprint(exists)

查找当前屏幕上是否存在某个控件

# 查找当前屏幕上是否存在某个控件exists = d(resourceId='com.android.settings:id/title').existsprint(exists)

获取当前屏幕上某个元素的坐标

# 获取当前屏幕上某个元素的坐标bounds = d(text='Settings').boundsprint(bounds)

获取当前屏幕上某个元素的属性信息

# 获取当前屏幕上某个元素的属性信息info = d(text='Settings').infoprint(info)

获取当前屏幕上指定控件的数量

# 获取当前屏幕上指定控件的数量count = d(className='android.widget.TextView').countprint(count)

获取当前屏幕上指定控件的列表

# 获取当前屏幕上指定控件的列表elements = d(className='android.widget.TextView').all()print(elements)

获取当前屏幕上指定控件的第一个元素

# 获取当前屏幕上指定控件的第一个元素element = d(className='android.widget.TextView').get_text()print(element)

获取当前屏幕上指定控件的第n个元素

# 获取当前屏幕上指定控件的第n个元素element = d(className='android.widget.TextView')[2]print(element)

获取当前屏幕上指定控件的父控件

# 获取当前屏幕上指定控件的父控件parent = d(text='Settings').parent()print(parent)

获取当前屏幕上指定控件的子控件列表

# 获取当前屏幕上指定控件的子控件列表children = d(resourceId='android:id/content').children()print(children)

获取当前屏幕上指定控件的兄弟控件列表

# 获取当前屏幕上指定控件的兄弟控件列表siblings = d(text='Settings').sibling()print(siblings)

获取当前屏幕上指定控件的下一个控件

# 获取当前屏幕上指定控件的下一个控件next_element = d(resourceId='com.android.settings:id/title').next()print(next_element)

获取当前屏幕上指定控件的上一个控件

# 获取当前屏幕上指定控件的上一个控件prev_element = d(resourceId='com.android.settings:id/title').previous()print(prev_element)

模拟手势操作

# 模拟手势操作d.gestures([(0.2, 0.2), # 起始点坐标(0.8, 0.8), # 终止点坐标(0.2, 0.8), # 控制点坐标(0.8, 0.2), # 控制点坐标])

获取当前屏幕的旋转角度

# 获取当前屏幕的旋转角度orientation = d.orientationprint(orientation)

强制旋转屏幕

# 强制旋转屏幕d.set_orientation('left')

获取当前屏幕的亮度值

# 获取当前屏幕的亮度值brightness = d.brightnessprint(brightness)

设置当前屏幕的亮度值

# 设置当前屏幕的亮度值d.brightness = 100

获取当前屏幕的截图并返回PIL.Image对象

# 获取当前屏幕的截图并返回PIL.Image对象image = d.screenshot(format='pillow')

获取当前屏幕的截图并返回numpy.ndarray对象

# 获取当前屏幕的截图并返回numpy.ndarray对象image = d.screenshot(format='opencv')

获取当前屏幕的截图并返回base64编码的字符串

# 获取当前屏幕的截图并返回base64编码的字符串image = d.screenshot(format='base64')

获取当前屏幕的截图并保存到指定文件中

# 获取当前屏幕的截图并保存到指定文件中d.screenshot('screenshot.png')

获取当前屏幕的截图并保存到指定文件中,并指定保存格式

# 获取当前屏幕的截图并保存到指定文件中,并指定保存格式d.screenshot('screenshot.jpg', format='jpeg')

获取当前屏幕的截图并保存到指定文件中,并指定截图区域

# 获取当前屏幕的截图并保存到指定文件中,并指定截图区域d.screenshot('screenshot.png', rect=(0, 0, 500, 500))

获取当前屏幕上所有的Toast信息

# 获取当前屏幕上所有的Toast信息toasts = d.toast.get_all_toast()print(toasts)

获取当前屏幕上最新的Toast信息

# 获取当前屏幕上最新的Toast信息toast = d.toast.get_message(10.0, default='')print(toast)

获取当前屏幕上指定类型的Toast信息

# 获取当前屏幕上指定类型的Toast信息toast = d.toast.get_message(10.0, 'success', '')print(toast)

点击通知栏中的某个通知

# 点击通知栏中的某个通知d.notification_click('Settings')

打开通知栏

# 打开通知栏d.open_notification()

打开快速设置面板

# 打开快速设置面板d.open_quick_settings()

获取当前屏幕上所有的通知信息

# 获取当前屏幕上所有的通知信息notifications = d.notification.get_all()print(notifications)

获取当前屏幕上指定应用的通知信息

# 获取当前屏幕上指定应用的通知信息notifications = d.notification.get_by_app('com.android.settings')print(notifications)

获取当前屏幕上指定应用的最新通知信息

# 获取当前屏幕上指定应用的最新通知信息notification = d.notification.get_by_app('com.android.settings', 10.0)print(notification)

获取当前屏幕上指定应用的指定类型通知信息

# 获取当前屏幕上指定应用的指定类型通知信息notification = d.notification.get_by_app('com.android.settings', 10.0, 'title', 'Settings')print(notification)

获取当前屏幕上指定应用的指定ID通知信息

# 获取当前屏幕上指定应用的指定ID通知信息notification = d.notification.get_by_id('com.android.settings', 1)print(notification)

清除当前屏幕上所有的通知信息

# 清除当前屏幕上所有的通知信息d.notification.clear_all()

清除当前屏幕上指定应用的所有通知信息

# 清除当前屏幕上指定应用的所有通知信息d.notification.clear_by_app('com.android.settings')

清除当前屏幕上指定应用的指定ID通知信息

# 清除当前屏幕上指定应用的指定ID通知信息d.notification.clear_by_id('com.android.settings', 1)

获取当前屏幕上所有的Toast信息,并保存到指定文件中

# 获取当前屏幕上所有的Toast信息,并保存到指定文件中toasts = d.toast.get_all_toast()with open('toasts.txt', 'w') as f:for toast in toasts:f.write(toast + '\n')

通过XPath查找元素

# 通过XPath查找元素element = d.xpath('//android.widget.TextView[@text="Settings"]')print(element)

通过XPath查找元素,并获取其文本内容

# 通过XPath查找元素,并获取其文本内容text = d.xpath('//android.widget.TextView[@text="Settings"]')[0].get_text()print(text)

通过XPath查找元素,并点击它

# 通过XPath查找元素,并点击它d.xpath('//android.widget.TextView[@text="Settings"]')[0].click()

通过XPath查找元素,并长按它

# 通过XPath查找元素,并长按它d.xpath('//android.widget.TextView[@text="Settings"]')[0].long_click()

通过XPath查找元素,并获取其属性信息

# 通过XPath查找元素,并获取其属性信息info = d.xpath('//android.widget.TextView[@text="Settings"]')[0].infoprint(info)

通过XPath查找元素,并获取其坐标

# 通过XPath查找元素,并获取其坐标bounds = d.xpath('//android.widget.TextView[@text="Settings"]')[0].boundsprint(bounds)

通过XPath查找元素,并输入文本

# 通过XPath查找元素,并输入文本d.xpath('//android.widget.EditText')[0].set_text('Hello World')

通过XPath查找元素,并滑动屏幕

# 通过XPath查找元素,并滑动屏幕d.xpath('//android.widget.ScrollView')[0].scroll.to(text='Developer options')

通过XPath查找元素,并获取其子元素列表

# 通过XPath查找元素,并获取其子元素列表children = d.xpath('//android.widget.ListView')[0].child()print(children)

通过XPath查找元素,并获取其父元素

# 通过XPath查找元素,并获取其父元素parent = d.xpath('//android.widget.ListView')[0].parent()print(parent)

通过XPath查找元素,并获取其兄弟元素列表

# 通过XPath查找元素,并获取其兄弟元素列表siblings = d.xpath('//android.widget.ListView')[0].sibling()print(siblings)

通过XPath查找元素,并获取其下一个元素

# 通过XPath查找元素,并获取其下一个元素next_element = d.xpath('//android.widget.TextView[@text="Settings"]')[0].next()print(next_element)

通过XPath查找元素,并获取其上一个元素

# 通过XPath查找元素,并获取其上一个元素prev_element = d.xpath('//android.widget.TextView[@text="Settings"]')[0].previous()print(prev_element)

通过XPath查找元素,并获取其子元素数量

# 通过XPath查找元素,并获取其子元素数量count = d.xpath('//android.widget.ListView')[0].countprint(count)

通过XPath查找元素,并获取其子元素列表中的第n个元素

# 通过XPath查找元素,并获取其子元素列表中的第n个元素element = d.xpath('//android.widget.ListView')[0][2]print(element)

通过XPath查找元素,并获取其子元素列表中的第一个元素

# 通过XPath查找元素,并获取其子元素列表中的第一个元素element = d.xpath('//android.widget.ListView')[0].get_text()print(element)

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。