【更新公告】Airtest更新至1.3.0.1版本

原创
2023/07/21 15:24
阅读数 102

👆对私有云感兴趣可以进入公众号回复“哦。

1. 前言

本次更新为 Airtest库更新 ,版本提升至1.3.0.1版本,主要新增了一些iOS设备相关的装包等接口,以及封装了一些tidevice常用接口。更多更新详情,详见我们下文的描述。

2. 新增iOS设备接口

1)iOS安装接口:installinstall_app

对于  本地USB连接的iOS设备  ,新版本支持装包功能:
  
  
  
# 可以直接使用install接口,支持通过本地.ipa文件安装APP,也支持通过下载链接安装APP
install(r"D:\demo\test.ipa")
install("http://www.example.com/test.ipa")

# 也可以先获取当前设备,用device().install_app的方式装包
dev = device()

dev.install_app(r"D:\demo\test.ipa")
dev.install_app("http://www.example.com/test.ipa")

2)iOS卸载接口:uninstalluninstall_app

对于  本地USB连接的iOS设备  ,新版本支持卸载功能:
  
  
  
# 可以直接使用uninstall接口卸载包体
uninstall("com.netease.cloudmusic")

# 也可以先获取当前设备,用device().uninstall_app的方式卸载包体
dev = device()

dev.uninstall_app("com.netease.godlike")

3)列出iOS设备所有APP的接口:list_app

对于  本地USB连接的iOS设备  ,新版本支持列出APP列表的功能:
在  list_app("user")  里传入要列出的app类型,我们可以得到相应的app列表。参数可选  user/system/all , 分别表示列出用户安装的app/系统app/全部app。返回值示例: [('com.apple.mobilesafari', 'Safari', '8.0'), ...]  。
  
  
  
dev = device()

#列出并打印全部APP
all_app = dev.list_app("all")
print(all_app)

#打印系统APP
print(dev.list_app("system"))

#列出并打印用户安装的APP
user_app = dev.list_app("user")
print(user_app)

4)iOS剪切板功能:get_clipboardset_clipboard

对于iOS设备(本地、远程均可),新版本支持剪切板功能:
  
  
  
#获取剪切板内容
text = get_clipboard()
print(text)

#设置剪贴板内容
set_clipboard("content")
注意:当iOS设备为  远程设备  、或者  安装了不止一个wda  时,需要指定具体的  wda_bundle_id  才能使用:
  
  
  
#获取剪切板内容
text = get_clipboard(wda_bundle_id="com.WebDriverAgentRunner.xctrunner")

#设置剪贴板内容
set_clipboard("content", wda_bundle_id="com.WebDriverAgentRunner.xctrunner")

3. 新增tidevice相关接口

针对本地USB接入的iOS设备,Airtest结合tidevice的能力,封装了一个  TIDevice  对象,提供了几个常用接口如下:
  • devices  :列出USB连接的所有设备的  UDID  列表
  • list_app  :列出手机上安装的应用列表,支持对类型进行筛选,包括  user/system/all
  • list_wda  :列出手机上安装的所有WDA的  bundleID
  • device_info  :获取手机信息
  • install_app  :安装ipa包,支持本地路径或URL
  • uninstall_app :卸载  bundle_id  对应的包体
  • start_app  :启动  bundle_id  对应的包体
  • stop_app  :停止  bundle_id  对应的包体
  • ps  :获取当前的进程列表
  • ps_wda  :获取当前启动中的WDA列表
  • xctest :启动WDA
可以参考: https://github.com/AirtestProject/Airtest/blob/master/tests/test_tidevice.py  。
代码执行效果示例:
  
  
  
>>> from airtest.core.ios.ios import TIDevice
>>> devices = TIDevice.devices()
>>> print(devices)
['10da21b9091f799891557004e4105ebab3416cb9']
>>> udid = devices[0]

>>> print(TIDevice.list_app(udid))
[ ('com.230316modified.WebDriverAgentRunner.xctrunner', 'wda-Runner', '1.0'),]

>>> print(TIDevice.list_app(udid, "system"))
[('com.apple.calculator', 'Calculator', '1.0.0'),]

>>> print(TIDevice.list_wda(udid))
['com.test.WebDriverAgentRunner.xctrunner']

>>> print(TIDevice.device_info(udid))
{'productVersion': '12.4.8', 'productType': 'iPhone7,2', 'modelNumber': 'MG472', 'serialNumber': 'DNPNW6EJG5MN', 'timeZone': 'Asia/Shanghai', 'uniqueDeviceID': '10da21b9091f799891557004e4105ebab3416cb9', 'marketName': 'iPhone 6'}

>>> TIDevice.start_app(udid, "com.apple.mobilesafari")

>>> TIDevice.stop_app(udid, "com.apple.mobilesafari")

>>> print(TIDevice.ps(udid))
[ {'pid': 215, 'name': 'MobileMail', 'bundle_id': 'com.apple.mobilemail', 'display_name': 'MobileMail'}]

>>> print(TIDevice.ps_wda(udid))
['com.test.WebDriverAgentRunner.xctrunner']
另外, TIDevice.xctest  接口的执行示例如下:
  
  
  
import threading
wda_bundle_id = TIDevice.list_wda(udid)[0]
# 创建一个线程,执行xctest
t = threading.Thread(target=TIDevice.xctest, args=(udid, wda_bundle_id), daemon=True)
t.start()
time.sleep(5)
ps_wda = TIDevice.ps_wda(udid)
print(ps_wda)
time.sleep(5)
# 终止线程
t.join(timeout=3)

4. 新增错误类型NoDeviceError

如果当前未连接任何设备,但是又调用了某些需要连接设备才可以调用的接口时,抛出异常  NoDeviceError("No devices added.")  :

5. using接口的改动

using  接口的作用是,支持在脚本中引用另外一个脚本,同时还能够让Airtest正确地读取到其他脚本中的图片路径。
假设目录结构如下:
  
  
  
demo/
foo/
bar.air
baz.air
main.py
如果我们希望在  main.py  中引用  foo/bar.air  和  baz.air ,可以将项目根路径设置到  ST.PROJECT_ROOT  ,或者确保项目根路径是当前工作目录:
  
  
  
# main.py
from airtest.core.api import *
ST.PROJECT_ROOT = r"D:\demo" # This line can be ignored if it is the current working directory
using("foo/bar.air")
using("baz.air")
如果我们希望在  foo/bar.air  中引用  baz.air  ,可以这样写:
  
  
  
# foo/bar.air
from airtest.core.api import *
using("../baz.air")

6. 其它优化与改动

  • 当Airtest脚本引发了  assert  异常时,退出码为  20  ,以便和其他报错区分
  • 更新了  Yosemite.apk  ,修复了一些稳定性问题
  • windows平台新增接口  set_focus  ,与原先的  set_foreground  功能相同

7. 如何更新

因本次更新  仅更新了Airtest库  ,所以同学们目前只能在自己本地python环境中,将Airtest更新到最新版本:
  
  
  
pip install -U airtest
对于使用AirtestIDE的同学,可以  等我们发布1.2.16版本的IDE  ,或者在旧版本AirtestIDE中设置使用本地python环境,然后将本地python环境的Airtest库升级到最新版本即可。

8. 更新常见问题

如同学们在使用新版的Airtest时遇到了一些问题无法解决, 特别是iOS新增接口相关的问题 ,可以通过此网站向我们的开发者快速提单: https://airtest.netease.com/issue_create  。
可以在标题中加入“Airtest1.3.0.1”之类的字眼,方便我们快速筛选和排查。
零基础学会用Airtest-Selenium对Firefox进行自动化测试
为什么AirtestIDE的selenium Window突然无法检索控件了?
如何用Airtest脚本连接无线Android设备?

本文分享自微信公众号 - AirtestProject(AirtestProject)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部