首页 > 其他分享 >【更新公告】Airtest更新至1.3.0.1版本

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

时间:2023-07-25 19:33:23浏览次数:42  
标签:wda 1.3 0.1 app iOS 更新 Airtest com TIDevice

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.airbaz.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官网https://airtest.netease.com/
Airtest教程官网https://airtest.doc.io.netease.com/
搭建企业私有云服务https://airlab.163.com/b2b

官方答疑 Q 群:117973773

呀,这么认真都看到这里啦,帮忙点个推荐支持一下呗,灰常感谢~

标签:wda,1.3,0.1,app,iOS,更新,Airtest,com,TIDevice
From: https://www.cnblogs.com/AirtestProject/p/17580792.html

相关文章

  • 使用gcc-13.1.0编译安装thrift-0.18.1
    执行configure生成Makefile,排除掉不需要的语言支持和测试等:./configure--prefix=/usr/local/thrift-0.18.1--with-boost=/usr/local/boost--with-libevent=/usr/local/libevent--with-openssl=/usr/local/openssl--with-cpp=yes--with-go=no--with-java=no--with-pyth......
  • PC微信 3.9.6 正式版终于来,大家一起来看看更新的功能
    今天给大家分享PC微信3.9.6 内测版本新增了哪些功能,带大家一起来看看吧!PC微信3.9.6内测官方更新日志PC微信内测依旧和之前一样,只有你有申请过之前版本的内测的话,获取到权限之后就可以一直进行体验内测的版本,不然你会没有权限进行体验。本次的PC微信3.9.6内测更新的日志:-可......
  • 我开源了团队内部基于SpringBoot Web快速开发的API脚手架v1.6.0更新
    什么是rest-api-spring-boot-starterrest-api-spring-boot-starter适用于SpringBootWebAPI快速构建让开发人员快速构建统一规范的业务RestFullAPI不在去关心一些繁琐。重复工作,而是把重点聚焦到业务。动机每次WebAPI常用功能都需要重新写一遍。或者复制之前的项目代码......
  • PaddleSharp:跨越一年的版本更新与亮点
    PaddleSharp:跨越一年的版本更新与亮点我始终坚信,开源社区是技术进步的重要推动力,也是我抽出我业余时间,投入到PaddleSharp这个项目的原因,这个项目充分展现了.NET在复杂计算领域的潜力。今天很高兴地告诉大家,PaddleSharp有了新版本!先来说说背景,有的朋友可能知道,PaddleSharp过去老......
  • vant组件没有被更新
    环境:uniapp、vue3、vant-weapp<template> <van-field:value="content"></van-field> <view>{{content}}</view></template>修改content,但van-field并没有跟着发生变化,而下面的{{content}}变化了。这可能是vant-weapp本身的问题。查看源码后发现,van-field的val......
  • 自动更新ssl证书
     @echooffsetlocalset"nginx_home=C:\phpEnv\server\nginx"set"nginx_ssl_path=C:\phpEnv\server\nginx\certs\"(opensslx509-in%nginx_ssl_path%\rxn.crt-checkend86400)|findstr/c:"not">nulif%errorlevel%......
  • android 软件更新代码
     AndroidF#    应用软件经常会因为功能的增加而升级,升级经常是在客户端给用户升级的提示,然后用户下载最新的apk程序包,软件升级过程大多数需要在线完成。      android在线安装apk程序包,主要用到系统自带的apk安装器进行安装。用到系统自带的apk安装器安装......
  • spring cloud common模块更新后,需要同步更新哪些服务?
    首先common没有启动类,他里面放的是一些静态资源,公共代码。理论上是需要更新所有依赖common模块的,就是maven依赖里面引用common包的都需要更新,但是这样太麻烦了。一般可以只更新需要依赖这一变动的服务。如果有feign调用,需要更新调用方,被调用方和网关gateway......
  • 1.3 循环结构 参考代码
    P5722[深基4.例11]数列求和#include<cstdio>intmain(){intn;scanf("%d",&n);intsum=0;for(inti=1;i<=n;i++)sum+=i;printf("%d\n",sum);return0;}P5718[深基4.例2]找最小值#include<cs......
  • [爬虫]1.1.3 网络爬虫的应用场景
    网络爬虫在各种不同的领域都有广泛的应用。它们可以用来收集,分析,处理和理解大量的在线信息。以下是网络爬虫的一些主要应用场景:1.搜索引擎搜索引擎,如Google,Bing,和Baidu,是网络爬虫的最主要的应用场景。搜索引擎使用网络爬虫来抓取网页内容,然后对这些内容进行索引并存储在数据库......