首页
资质证书
新闻中心
公司简介
联系我们
搜索
位置 首页>新闻中心>行业快讯
行业快讯

多设备兼容脚本,轻松拿捏

发布时间:2024-06-20| 作者:山西云络| 浏览次数:{{num}}

一、前言

有比较多同学有提到说能否一个脚本同时适用于 Android 跟 iOS 设备,也有同学问是否可以根据不同的 Android 厂商设备,去执行不同的操作,那么本周,我们一起探讨一下这个问题,如何让一个脚本兼容更多的机型~

二、如何查询所连接的设备信息

2.1 简单分辨 iOS 设备与 Android 设备

我们在连接完设备后,可以通过下方的语句查询到我们所连接设备时使用的类是什么,并将该类的名称返回。

 device().__class__.__name__.lower() 

在 Airtest 中,Android 设备以及 iOS 设备所使用的类不同,并以系统名作为类名称,所以我们可以直接通过类的名称将其区分开来。

2.2 分辨不同的 Android 设备厂商以及设备型号

Android 设备厂商比较多,我们可以通过下方的 adb 命令查询的方式去获取我们所连接的设备的相关信息,我们在控制台输入adb shell,进入 linux 命令行,再输入下方命令,可以看到有我们所需要的设备信息。

 adb shell getprop | grep product 但是我们可以根据自己的需求去进行筛选,如我们这里使用到的设备品牌以及设备型号,分别可以通过下方的方式获取
 # 获取设备品牌名adb shell getprop ro.product.brand# 获取设备型号adb shell getprop ro.product.model 在代码中,我们使用 python3 的子进程模块 subprocess 的 subprocess.check_output([],text=True) 方法去执行 adb 命令,其中 text=True 参数表示返回的输出结果是一个字符串,可以直接使用
 # 获取设备品牌brand = subprocess.check_output(['adb', 'shell', 'getprop', 'ro.product.brand'], text=True).strip() # 获取设备型号model = subprocess.check_output(['adb', 'shell', 'getprop', 'ro.product.model'], text=True).strip()  

三、分辨 iOS 设备与 Android 设备案例

 # -*- encoding=utf8 -*-__author__ = "Airtest"from airtest.core.api import *auto_setup(__file__)# 定义Android操作函数def android_operate():    start_app("com.miui.player")  # 打开小米音乐APP    sleep(3.0)    wait(Template(r"tpl1717383819774.png", record_pos=(-0.196, -0.251), resolution=(1080, 2400)))    touch(Template(r"tpl1717383706465.png", record_pos=(-0.194, -0.242), resolution=(1080, 2400)))    sleep(3.0)    print("已打开小米的音乐APP了")# 定义iOS操作函数def ios_operate():        from poco.drivers.ios import iosPoco    poco = iosPoco()        poco("播客").click()  # 点击播客    sleep(1.0)    poco("女性畅聊健康生活方式 轻松温暖治愈日常烦恼").click()  # 点击女性畅聊健康生活方式    sleep(1.0)    print("已打开iphone的播客APP了")if __name__ == "__main__":    # 获取连接的设备信息    platform = device().__class__.__name__.lower()    if platform == "android":        print("当前设备是Android")  # 输出当前设备是Android        sleep(3.0)        android_operate()    elif platform == "ios":        print("当前设备是iOS")  # 输出当前设备是iOS        sleep(3.0)        ios_operate()    else:        print("当前设备是未知设备")  # 输出当前设备是未知设备 

四、Android 设备分辨不同厂商型号案例

 # -*- encoding=utf8 -*-__author__ = "Airtest"from airtest.core.api import *auto_setup(__file__)import subprocessdef get_android_device_info():    try:        # 使用 adb shell getprop 获取设备品牌和型号信息        brand = subprocess.check_output(['adb', 'shell', 'getprop', 'ro.product.brand'], text=True).strip() # 获取设备品牌        model = subprocess.check_output(['adb', 'shell', 'getprop', 'ro.product.model'], text=True).strip() # 获取设备型号        return brand, model    except Exception as e:        # 捕获异常        print(f"An error occurred: {e}")        return None, Nonedef open_vivo_music():    start_app("com.android.bbkmusic") # 打开Vivo音乐APP    sleep(3.0)    wait(Template(r"tpl1717383100103.png", record_pos=(-0.376, -0.051), resolution=(720, 1440)))    touch(Template(r"tpl1717383106988.png", record_pos=(-0.375, -0.044), resolution=(720, 1440)))    sleep(3.0)    print("已打开Vivo的i音乐APP了")def open_xiaomi_music():    start_app("com.miui.player") # 打开小米音乐APP    sleep(3.0)    wait(Template(r"tpl1717383819774.png", record_pos=(-0.196, -0.251), resolution=(1080, 2400)))    touch(Template(r"tpl1717383706465.png", record_pos=(-0.194, -0.242), resolution=(1080, 2400)))    sleep(3.0)    print("已打开小米的音乐APP了")def open_huawei_music():    start_app("com.android.mediacenter") # 打开华为音乐APP    sleep(3.0)    wait(Template(r"tpl1717384154362.png", record_pos=(-0.388, 0.02), resolution=(1080, 2340)))    touch(Template(r"tpl1717384181392.png", record_pos=(-0.331, 0.439), resolution=(1080, 2340)))    sleep(3.0)    print("已打开华为的音乐APP了")def print_device_info(brand, model):    if brand and model:        print(f"当前设备品牌: {brand}") # 打印当前设备品牌        print(f"当前设备型号: {model}") # 打印当前设备型号        sleep(3.0)    else:        print("无法获取设备品牌和型号") # 打印无法获取设备品牌和型号if __name__ == "__main__":    # 获取 Android 设备品牌和型号    brand, model = get_android_device_info() # 获取设备品牌和型号    print_device_info(brand, model)    # 将打开各类品牌手机APP写成一个字典    music_apps = {        "HUAWEI": open_huawei_music, # 打开华为音乐APP        "vivo": open_vivo_music, # 打开Vivo音乐APP        "Xiaomi": open_xiaomi_music # 打开小米音乐APP    }        #在获取完设备品牌后,在字典内找到对应的方法并执行    music_app = music_apps.get(brand)        if music_app:        music_app()    else:        print("没有该型号适用的方法")         

五、小结

我们本周推文主要是介绍了如何去分辨所连接的设备是 Android 设备还是 iOS 设备,以及如何分辨 Android 设备的厂商和型号,根据这些方式,我们可以结合自己的需求,进一步优化我们的测试脚本以及编写更具有通用性的脚本。

如果在测试的过程中,遇到了问题,或者有任何想要深入了解的知识点,欢迎在官方交流群(526033840)里告诉我们或者提交 issue,也欢迎大家投稿其他不同的使用小技巧。



分享
联系邮箱

sxyl@sxyl.tech

单位地址:山西转型综合改革示范区学府产业园产业路48号新岛科技园 C 座406

分享
版权所有 © 版权所有 copyright©2024山西云络科技有限公司 晋ICP备2020014723号-3 技术支持:SXYL