首页 > 其他分享 >多设备兼容脚本,轻松拿捏

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

时间:2024-06-06 10:46:12浏览次数:28  
标签:__ APP 轻松 兼容 拿捏 sleep print Android 设备

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

一、前言

有比较多同学有提到说能否一个脚本同时适用于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的子进程模块 subprocesssubprocess.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 subprocess


def 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, None


def 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,也欢迎大家投稿其他不同的使用小技巧。


AirtestIDE下载:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b

官方答疑 Q 群:526033840

标签:__,APP,轻松,兼容,拿捏,sleep,print,Android,设备
From: https://www.cnblogs.com/AirtestProject/p/18234664

相关文章

  • CS8406国产兼容替代芯片DP7406数字音频I2S转SPDIF/AES3同轴输出芯片
    模拟音频传输VS数字音频传输模拟音频传输效果模拟音频传输特点:直观且容易实现,但相对会出现失真、不稳定的情况。数字音频传输效果数字音频传输特点:经过数字手段记录、存储、编辑、压缩或播放声音处理,采样率和量化等级越高,模数转换的精度就越高,对信号的还原能力就越强。D......
  • 界面组件DevExpress Reports v23.2增强用户体验 - 轻松导航Web设计器
    DevExpressReporting是.NETFramework下功能完善的报表平台,它附带了易于使用的VisualStudio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。DevExpressReportsv23.2(我们最近的主要更新)包含了对DevExpressWeb报表设计器的智能......
  • 利用短视频平台,轻松引流获客:自动私信评论策略全解析
    在数字化时代,短视频已成为互联网流量的新蓝海,其独特的视觉吸引力和高度的用户粘性为各行各业提供了前所未有的营销机遇。无论是初创企业还是成熟品牌,都能通过短视频平台有效触达目标客户,实现高效引流与获客。本文将深入探讨如何利用短视频平台,结合精准推广策略,轻松吸引潜在客户......
  • “粘土风格”轻松拿捏,基于函数计算部署 ComfyUI实现AI生图
    阿里云函数计算FC 一键部署火爆全球工作流AI生图平台——ComfyUI ,实现更高质量的图像生成,三步轻松完成“黏土”创意AI画作,晒图赢眼部按摩器等好礼!活动地址:https://developer.aliyun.com/topic/june/fc?spm=a2c6h.29234099.J_6985717350.4.65997562KE82EH实验准备目前在......
  • 如何将OnePlus手机上的文件轻松传输到Mac(3种简便方法)
    拥有一台OnePlus手机,意味着你拥有了一台性能强劲、功能丰富的Android设备。但当手机存储空间告急,或者你想要更好地管理和备份个人数据时,将文件传输到Mac电脑上无疑是一个明智的选择。本文将为你介绍三种简单有效的方法,帮助你轻松实现OnePlus到Mac的数据传输。方式一:使用Coolmu......
  • 如何让委外加工管理更轻松?
    中小制造企业,受制于场地、资金、环保、质量、交期等等因素影响,在生产制造过程中,多数会将一些生产工序或者在制品外发给其他制造工厂进行委外加工生产。随着各地监管部门对环境、能耗管控力度的加大,这种情况在机加工行业尤为突出。委外加工影响到企业订单的按期交付、生产计......
  • 用AI绘画在小红书做副业,每月轻松5000+
    用AI绘画做副业是不是真的很难?很多人这样问我。其实有时候也不知道要如何回答。说困难吧,、拆解了那么多AI绘画的项目,哪个项目都能多少挣个万把块钱。说简单吧,有多少人坚持不到出爆款的那天,就已经放弃了。昨天很难,今天很难,但明天肯定会好。但百分之九十的人死在了今天......
  • 懒人开发者的福音,轻松开发应用无需搭建服务!
    近日,一款轰动开发圈的神器正以“太硬核了!疯传开发圈!”的口碑迅速走红,那就是MemfireCloud!这款一站式开发应用,不仅让懒人开发者尽享便利,更为开发者们带来了前所未有的开发体验。对于懒人开发者而言,MemfireCloud的出现简直是一大福音。说到底,谁不想轻松开发应用,却又不必费......
  • kettle从入门到精通 第六十五课 ETL之kettle 执行动态SQL语句,轻松实现全量&增量数据同
    本次课程的逻辑是同步t1表数据到t2表,t1和t2表的表机构相同,都有id,name,createtime三个字段。 CREATETABLE`t1`(`id`bigintNOTNULLAUTO_INCREMENT,`name`varchar(10)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciDEFAULTNULL,`createtime`datetime......
  • 掌握三大秘籍,普通人也能轻松驾驭AI大模型:告别技术焦虑,快速上手攻略
    机器学习项目成功的关键,在于对问题的深刻理解,而非算法的选择。——彼得·诺维格(PeterNorvig)谷歌研究总监,人工智能专家这是互联网悦读笔记五一后正式复更的第一天。也是我开始系统化对外输出AI思考的第一篇文章。熟悉这个号的朋友大概能猜到,24年初开始,我就把主要精力投......