猎头公司网站建设方案长沙 网站建设公司
一、AndroidUiAutomation 类 功能简介
-
功能: 为 Android 设备提供 UI 自动化操作的工具类,支持连接设备、获取截图、点击、滑动、获取屏幕分辨率和清理资源等功能。
-
参数:
device_id(可选):设备 ID(如 “emulator-5554”),如果未指定则自动检测。
-
异常:
ConnectionError:如果无法连接设备。
-
说明:
AndroidUiAutomation 类基于 uiautomator2 库与 Android 设备交互,提供了一系列方法来执行常见的 UI 操作,适用于 UI 测试和自动化任务。
二、代码功能解析
1. __init__ 方法
-
**功能:**初始化
AndroidUiAutomation类并连接设备。 -
参数:
device_id(可选):设备 ID(字符串类型)。
-
代码片段:
def __init__(self, device_id=None):try:self.device = u2.connect(device_id) if device_id else u2.connect()print(f"成功连接设备: {self.device.device_info}")except Exception as e:raise ConnectionError(f"无法连接设备: {e}") -
说明:
-
如果提供了
device_id,则连接指定设备;否则,自动检测并连接设备。 -
连接失败时抛出
ConnectionError 异常。
-
2. get_screenshot 方法
-
**功能:**获取设备屏幕的实时截图,并可选择保存到文件。
-
参数:
save_path(可选):保存截图的路径(字符串类型),如果为 None 则不保存。
-
返回值:
numpy.ndarray:OpenCV 格式的截图(BGR 格式)。
-
异常:
Exception:如果截图失败。
-
代码片段:
def get_screenshot(self, save_path=None):try:screenshot = self.device.screenshot(format='opencv')if save_path:cv2.imwrite(save_path, screenshot)print(f"截图已保存到: {save_path}")return screenshotexcept Exception as e:raise Exception(f"获取截图失败: {e}") -
说明:
-
返回设备的实时截图(OpenCV 格式)。
-
如果指定了
save_path,则保存截图到该路径。
-
3. click 方法
-
**功能:**点击设备屏幕上的指定坐标。
-
参数:
-
x:X 坐标(整数类型)。 -
y:Y 坐标(整数类型)。
-
-
返回值:
bool:操作是否成功。
-
异常:
ValueError:如果坐标无效或超出屏幕范围。
-
代码片段:
def click(self, x, y):try:width, height = self.device.window_size()if not (0 <= x < width and 0 <= y < height):raise ValueError(f"坐标 ({x}, {y}) 超出屏幕范围 {width}x{height}")self.device.click(x, y)print(f"成功点击坐标 ({x}, {y})")return Trueexcept Exception as e:print(f"点击失败: {e}")return False -
说明:
- 检查坐标是否在屏幕范围内,若有效则执行点击操作并返回 True,否则返回 False。
4. swipe_coordinates 方法
-
**功能:**在设备屏幕上从起始坐标滑动到结束坐标。
-
参数:
-
start_x:起始点 X 坐标(整数类型)。 -
start_y:起始点 Y 坐标(整数类型)。 -
end_x:结束点 X 坐标(整数类型)。 -
end_y:结束点 Y 坐标(整数类型)。 -
duration(可选):滑动时长(毫秒,默认为 500ms)。
-
-
返回值:
bool:操作是否成功。
-
异常:
ValueError:如果坐标无效或超出屏幕范围。
-
代码片段:
def swipe_coordinates(self, start_x, start_y, end_x, end_y, duration=500):try:width, height = self.device.window_size()if not (0 <= start_x < width and 0 <= start_y < height and 0 <= end_x < width and 0 <= end_y < height):raise ValueError(f"坐标超出屏幕范围 {width}x{height}")self.device.swipe(start_x, start_y, end_x, end_y, duration)print(f"成功从 ({start_x}, {start_y}) 滑动到 ({end_x}, {end_y}),时长 {duration}ms")return Trueexcept Exception as e:print(f"滑动失败: {e}")return False -
说明:
- 检查坐标有效性后执行滑动操作,返回操作结果。
5. get_screen_resolution 方法
-
**功能:**获取设备屏幕的分辨率。
-
返回值:
tuple:屏幕分辨率(width, height)。
-
代码片段:
def get_screen_resolution(self):try:width, height = self.device.window_size()print(f"屏幕分辨率: {width}x{height}")return width, heightexcept Exception as e:print(f"获取分辨率失败: {e}")return None, None -
说明:
- 返回屏幕的宽度和高度,失败时返回 (None, None)。
6. cleanup 方法
-
**功能:**清理资源,断开设备连接。
-
返回值:
bool:操作是否成功。
-
代码片段:
def cleanup(self):try:self.device.disconnect()print("设备连接已断开")return Trueexcept Exception as e:print(f"清理失败: {e}")return False -
清理资源,断开设备连接
- 断开设备连接并释放资源,返回操作结果。
UiAutomation 类
-
**功能:**根据系统和语言初始化 UI 自动化操作,并提供模拟操作步骤的方法。
-
参数:
-
**system:**操作系统类型(字符串类型,如 “android”)。
-
**language:**语言类型(字符串类型,如 “en”)。
-
-
说明:
UiAutomation类设计为根据系统和语言配置初始化 UI 操作环境,并通过simulation_operation_step方法执行具体操作步骤。
1. __init__ 方法
-
**功能:**初始化
UiAutomation类。 -
参数:
-
system:操作系统类型(字符串类型)。 -
language:语言类型(字符串类型)。
-
-
代码片段:
def __init__(self, system, language):if system == "android":# self.drive = AndroidUiAutomation()print(f"system: {system}, language: {language}")# self.action = UITools(self.drive, language) -
说明:
-
根据
system判断操作系统类型,当前仅支持 “android”。 -
self.drive和self.action被注释掉,仅打印系统和语言信息。 -
注意:初始化逻辑不完整,建议启用并完善相关代码。
-
2. simulation_operation_step 方法
-
**功能:**根据步骤执行 UI 操作。
-
参数:
-
step:操作步骤(字典类型,包含 “type”、“action” 和 “value” 键)。 -
keywords(可选):操作关键词列表(默认为 [“type”, “action”, “value”])。
-
-
代码片段:
def simulation_operation_step(self, step, keywords=None):if keywords is None:keywords = ["type", "action", "value"]type = step[keywords[0]] # 识别方法:文字识别/图片识别action = step[keywords[1]] # 操作方法:点击/输入/滑动value = step[keywords[2]] # 数据if type in ["text", "ocr", "文本"]:if action in ["click", "点击"]:# self.action.click_text(value)print(f"text: {value}")elif type in ["image", "图片"]:if action in ["click", "点击"]:# self.action.click_image(value)print(f"image: {value}")else:raise ValueError("不支持的操作类型") -
说明:
-
根据 step 中的 type 和 action 执行操作,支持文本识别(“text”、“ocr”、“文本”)和图片识别(“image”、“图片”)。
-
当前仅支持点击操作,实际操作被注释掉,仅打印信息。
-
注意:需实现 self.action 的相关方法以完成功能。
-
三、思路总结
核心思路:
-
模块化设计:
-
AndroidUiAutomation类封装了设备交互的基本操作(如连接、截图、点击、滑动),基于 uiautomator2 实现。 -
UiAutomation类负责根据系统和语言初始化环境,并提供操作步骤的执行接口。
-
-
灵活的操作支持:
-
支持通过文本识别和图片识别定位 UI 元素,并执行点击等操作。
-
simulation_operation_step 方法设计为可扩展,支持更多操作类型(如输入、滑动)。
-
-
异常处理和资源管理:
- AndroidUiAutomation 类中包含了连接错误处理和资源清理功能,确保操作的稳定性和资源释放。
-
当前实现状态:
-
UiAutomation 类的核心功能(self.drive 和 self.action)被注释掉,仅打印信息,未实现实际操作。
-
代码注释表明作者计划集成 AndroidUiAutomation 和 UITools 来完成完整功能,但尚未实现。
-
-
改进建议:
-
完善 UiAutomation 类的初始化逻辑,启用 self.drive 和 self.action。
-
实现 UITools 中的 click_text 和 click_image 方法,以支持文本和图片识别的点击操作。
-
💢 扩展 simulation_operation_step 方法,支持更多操作类型(如输入、滑动)。
-
