使用 Airtest 进行 Android 应用自动化的教程

简介

Airtest 是一个开源的移动端自动化测试框架,支持 Android 和 iOS 应用的自动化测试。它提供了丰富的 API 和用户友好的界面,使得自动化测试变得简单和高效。在本教程中,我们将学习如何使用 Airtest 对 Android 应用进行自动化测试。

环境准备

  1. 安装 Python 环境。
  2. 安装 Airtest。在命令行中运行 pip install airtest
  3. 安装 Android SDK 并配置环境变量。
  4. 安装 ADB 并配置环境变量。
  5. 将 Android 设备连接到电脑。

编写自动化测试脚本

  1. 创建一个新的 Python 文件,例如 test_weather_app.py
  2. 导入 Airtest 的 API 和其他必要的库。
 
from airtest.core.api import *
from airtest.cli.parser import cli_setup
import os
import subprocess

python复制代码

  1. 检查 ADB 设备是否连接。
 
def check_adb_devices():
try:
output = subprocess.check_output(["adb", "devices"])
if b"List of devices attached" in output and b"device" in output:
print("ADB devices found.")
return True
else:
print("No ADB devices found.")
return False
except subprocess.CalledProcessError:
print("ADB command failed.")
return False

python复制代码

  1. 连接 Android 设备。
 
if __name__ == "__main__":
if not check_adb_devices():
print("No ADB devices detected. Please check your device connection.")
exit(1)
device = connect_device("Android:///")

python复制代码

  1. 编写自动化测试步骤。
 
# 获取当前脚本所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
template_path = os.path.join(script_dir, "weather_icon.png")
# 确认模板文件存在
if not os.path.exists(template_path):
print(f"Template file {template_path} does not exist.")
exit(1)
# 截图并保存为 weather_screenshot.png
snapshot(filename="weather_screenshot.png")
# 使用模板匹配点击“天气”图标
print(f"Trying to find and click the template: {template_path}")
match_pos = exists(Template(template_path))
if match_pos:
print(f"Matched position: {match_pos}")
click(match_pos)
# 等待一段时间,让应用加载
time.sleep(5)
# 假设 "weather_condition_icon.png" 是天气页面上的天气状况图标
weather_condition_icon_path = os.path.join(
script_dir, "weather_condition_icon.png"
)
# 确认天气状况图标的模板文件存在
if not os.path.exists(weather_condition_icon_path):
print(
f"Weather condition icon template file {weather_condition_icon_path} does not exist."
)
exit(1)
# 等待天气状况图标出现
assert_exists(
Template(weather_condition_icon_path),
"Weather condition icon not found on screen.",
)
print("Successfully entered the weather page.")
else:
print("Template not found.")

python复制代码

  1. 关闭设备连接。
device.disconnect()

python复制代码

运行自动化测试脚本

from airtest.core.api import *
from airtest.cli.parser import cli_setup
import os
import subprocess

# 确保 Airtest 已经设置好
if not cli_setup():
    auto_setup(__file__, logdir=True, devices=["Android:///"])


# 连接设备
def check_adb_devices():
    try:
        output = subprocess.check_output(["adb", "devices"])
        if b"List of devices attached" in output and b"device" in output:
            print("ADB devices found.")
            return True
        else:
            print("No ADB devices found.")
            return False
    except subprocess.CalledProcessError:
        print("ADB command failed.")
        return False


# 主程序
if __name__ == "__main__":
    # 检查 ADB 设备
    if not check_adb_devices():
        print("No ADB devices detected. Please check your device connection.")
        exit(1)

    # 连接设备
    device = connect_device("Android:///")

    # 获取当前脚本所在目录
    script_dir = os.path.dirname(os.path.abspath(__file__))
    template_path = os.path.join(script_dir, "weather_icon.png")

    # 确认模板文件存在
    if not os.path.exists(template_path):
        print(f"Template file {template_path} does not exist.")
        exit(1)

    # 截图并保存为 weather_screenshot.png
    snapshot(filename="weather_screenshot.png")

    # 使用模板匹配点击“天气”图标
    print(f"Trying to find and click the template: {template_path}")
    match_pos = exists(Template(template_path))
    if match_pos:
        print(f"Matched position: {match_pos}")
        click(match_pos)

        # 等待一段时间,让应用加载
        time.sleep(5)

        # 假设 "weather_condition_icon.png" 是天气页面上的天气状况图标
        weather_condition_icon_path = os.path.join(
            script_dir, "weather_condition_icon.png"
        )

        # 确认天气状况图标的模板文件存在
        if not os.path.exists(weather_condition_icon_path):
            print(
                f"Weather condition icon template file {weather_condition_icon_path} does not exist."
            )
            exit(1)

        # 等待天气状况图标出现
        assert_exists(
            Template(weather_condition_icon_path),
            "Weather condition icon not found on screen.",
        )

        print("Successfully entered the weather page.")
    else:
        print("Template not found.")

    # 关闭设备连接
    device.disconnect()
  1. 在命令行中运行 python test_weather_app.py
  2. 观察脚本运行结果和日志输出。
  3. 会在test_weather_app.py根目录下创建一个log文件夹,运行会自动截图手机

通过本教程,您已经学会了如何使用 Airtest 对 Android 应用进行自动化测试。您可以根据实际需求编写更复杂的自动化测试脚本,以提高您的应用程序的质量和稳定性。

这个小图片必须从大图片那里截图下来的,在test_weather_app.py   

手动创建在根目录下名字weather_icon.png

Airtest主要是基于图像识别技术来定位和交互元素的。它使用预定义的模板图像来匹配屏幕上的目标元素,并确定其位置。当找到匹配的目标时,就可以执行相应的操作,如点击、滑动等。

然而,在你的问题中提到的代码片段似乎没有达到预期的效果,原因可能有以下几个:

  1. 图标模板不准确:如果你使用的图标模板与实际屏幕上的图标不完全匹配,Airtest可能无法找到正确的匹配点。确保模板图像清晰无误,并且尽可能覆盖整个图标。

    图标模板不准确:如果你使用的图标模板与实际屏幕上的图标不完全匹配,Airtest可能无法找到正确的匹配点。确保模板图像清晰无误,并且尽可能覆盖整个图标。

  2. 屏幕分辨率差异:如果设备的屏幕分辨率与模板图像的创建分辨率不同,可能导致匹配失败。尽量使用与目标设备相同分辨率的设备来创建模板图像。

  3. 元素不可见或不可点击:如果目标元素在屏幕外或者被其他元素遮挡,Airtest可能无法点击到它。检查元素是否可见并且可交互。

  4. 点击坐标偏移:有时候,即使找到了正确的图标,点击操作也可能因为坐标偏移而失败。尝试调整点击坐标的相对位置,或者使用'swipe()swipe()方法代替'click()click()来确保点击到正确的位置

  5. 应用界面变动:如果应用的界面发生了改变,原来的图标可能不再出现在相同的位置,导致匹配失败。重新录制或创建新的模板图像。

  6. 系统级限制:某些系统级别的设置或权限可能阻止Airtest对某些元素的操作。确保你的应用有足够的权限,并且没有受到系统安全策略的影响。

针对这些问题,你可以采取以下措施来解决:

  • 更新模板图像:确保模板图像与实际屏幕上的图标一致。
  • 调整坐标:尝试稍微调整点击坐标,或者使用'swipe()swipe()方法来确保点击到正
  • 重试录制:如果应用界面发生改变,考虑重新录制或创建新的模板图像。
  • 检查权限:确保应用具有足够的权限,并且没有受到系统安全策略的影
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值