Airtest快问快答,你们想问的这里都有!(第2期)

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: Airtest快问快答,你们想问的这里都有!(第2期)

本期我们又给同学们整理了答疑Q群中15个最常问的问题,包含 如何处理设备状态异常如何选择备选的连接参数 、如何进行 多图查找 或者 多元素查找 等等,后续我们还会持续整理更多常见问题帮助大家避坑哒~


27.如何清空输入框的文本



Airtest的方式:


for i in range(10):
    keyevent("67")
# 或者
for i in range(10):
    keyevent("KEYCODE_DEL")
复制代码


Poco的方式:


# 将输入框内容设置为空字符串,poco("xxx")为输入框的元素定位语句
poco("xxx").set_text("")
复制代码


28.设备的3种状态:device、unauthorized、offline



1)device:设备在线可连接


通常情况下,我们使用 adb devices 命令在命令行查看与本机连接的设备详情,或者在Airtest IDE的设备连接窗口查看当前设备列表时,只有设备状态为 device 的设备,才是与本机正常连接且可通讯的设备:


image.png

2)unauthorized:未允许USB调试


如果开启了手机的 USB调试 选项并且用USB线连接好了设备和电脑,却发现设备状态为 unauthorized ,则表示未处理 允许USB调试 的弹窗,允许该弹窗即可:


image.png


3)offline:设备掉线不可用


常见于2种设备连接情况:


一种是连接模拟器设备,模拟器未启动完全就使用 adb connect 命令连接或者使用过程中模拟器挂了,都会出现模拟器的状态为 offline 的情况。这时候只要重新使用 adb connect 命令再次连接模拟器即可。


另外,也可能是模拟器自带的adb版本与Airtest自带的adb版本不一致,发生了冲突,导致adb连接出现问题,也会造成模拟器的状态为 offline 。这时需要将2个不一样版本的adb统一成一个相同的版本即可。


第二种情况常见于真机的无线连接。WiFi波动导致设备断连,出现 offline 状态,则需要重新执行 adb connect ip:port 。如还不能解决,则需要将无线连接的所有步骤重来一次,真机无线连接的教程可以参考:airtest.doc.io.netease.com/IDEdocs/dev…


29. no moudle named 'poco.drivers'



如在运行脚本过程中出现 no moudle named 'poco.drivers' 的报错,则表示当前python环境误装了poco库,未安装pocoui库。


需要注意的是,poco框架的库名为pocoui ,并不是poco,此时需要卸载掉poco库,安装正确的pocoui库即可:


pip uninstall poco
pip install pocoui
复制代码


30.安装指定版本的库



命令如下:


pip install -U airtest==1.1.6
复制代码


31.使用IDE截图特别模糊如何处理



如果同学们发现使用IDE截出来的图片非常模糊,可以尝试在AirtestIDE的 选项--设置 中,把 手机设备显示分辨率 调成2000,之后再重新连接设备,查看截图清晰度是否有所改善。


如未改善,还可以查看设备连接窗口的设备画面是否清晰,如还是非常模糊的话,可以先断开连接,然后在 conncet 之前勾选 use javacap ,之后再尝试截图。


32.如何判断当前该选用哪种poco模式



IDE的poco辅助窗内,给同学们提供了多种poco模式:


image.png


其中,如果我们测试的是安卓原生应用,则选取其中的Android模式即可,安卓的微信小程序也是选择此模式,且该模式不需要应用额外接入poco-sdk;


如果我们测试的是iOS原生应用,则选取其中的iOS模式即可,但目前不支持测试iOS微信小程序,所以iOS模式仅适用于测试iOS原生应用的情况,应用也无需额外接入poco-sdk;


其余模式,如unity、UE4、Cocos-lua等,指的是所测游戏项目的引擎类型,使用这些模式时,要求在游戏项目中接入对应的poco-sdk,并且打出项目包安装在设备上之后,才能使用,比如使用unity模式获取unity游戏项目的控件树:


image.png


33.如何安排脚本初始化、poco初始化和启动应用的顺序



很多新手在使用poco的时候,都容易把连接设备、初始化poco和打开应用的脚本顺序搞乱,导致出现一大堆奇妙的报错。


比如大家最常见的:“远程主机强迫关闭了一个现有的连接”“socket connection broken” 等等。


最正确的顺序是:先连接设备(一般在 auto_setup 接口里面连接)--> 再打开应用(一般用 start_app 接口)--> 等应用开启完毕,最后才初始化 poco


# -*- encoding=utf8 -*-
__author__ = "Airtest"
from airtest.core.api import *
# 连接设备
auto_setup(__file__,logdir=True,devices=["Android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP"])
#启动应用
start_app("com.NetEase")
sleep(6.0)
# 初始化poco
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
poco("btn_start").click()
复制代码


所以同学们在初始化poco的时候,千万记住要检查下这几条代码的顺序,避免产生不必要的报错。


34.同一个脚本初始化多个poco



在同一个脚本内,支持初始化多个不一样的poco,比如 Android poco 和 unity poco,就是可以共存的:


image.png


from airtest.core.api import *
auto_setup(__file__,devices=["android://127.0.0.1:5037/emulator-5554?cap_method=MINICAP_STREAM&&ori_method=MINICAPORI&&touch_method=MINITOUCH"])
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
A_poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
sleep(1.0)
A_poco("poco").click()
sleep(2.0)
from poco.drivers.unity3d import UnityPoco
U_poco = UnityPoco()
U_poco("btn_start").click()
复制代码


但是我们不能在同一个脚本内,反复初始化相同的poco,比如多次初始化Android poco,就有可能导致奇奇怪怪的错误出现。


35.指定python环境安装第三方库



很多情况下,同学们的电脑里面可能安装了不止一个python环境,比如同时存在python2和python3,要在指定的python环境下安装第三方库,可使用如下命令:


python3 -m pip install airtest # 在python3环境下安装airtest库
python2 -m pip install airtest # 在python2环境下安装airtest库
复制代码


除了从命令层面来区分以外,更直接的办法是同学们自己去对应的python目录下,用那个目录下的pip.exe来安装。


36.三个备选的连接参数



1)备选参数在哪里选择


在AirtestIDE的设备连接窗口中,点击connect连接设备之前,单击connect右侧的下拉按钮,即可找到3个连接设备的备选参数:


image.png


2)3个备选参数分别代表什么意思


① 第一个 Use javacap ,是给部分无法正常看到手机画面、minicap初始化失败 的手机或设备用的,所以模拟器看到黑屏、部分特殊的平板等设备可以考虑勾选这个选项


② 第二个 Use ADB orientation 是用于 屏幕旋转 的,如果在安卓手机屏幕旋转方向检测有问题、或者是部分特殊的平板无法显示正确的屏幕方向时可以勾选


③ 第三个 Use ADB touch 是 发送adb指令来点击屏幕 ,效果很差,速度也很慢,不建议勾选,只有在 部分无法点击屏幕的特殊安卓设备 上才需要使用(例如智能后视镜、特殊型号的平板等设备上) 正常情况下,手机都可以点击,如果无法被点击(比如小米设备),一般都是因为手机设置有选项漏了打开,特别是小米设备要注意 开启允许模拟点击 的设置


3)是不是把备选参数全带上就能适配所有设备


正常情况下,同学们连接设备是不需要勾选任何备选参数的,我们也不建议大家主动把所有备选参数都勾选上,因为这些备选参数会影响设备连接和使用的效果。


除非是上述提到的特殊情况,比如无法使用minicap的设备,可以通过勾选 use javacap 来连接;常见的需要勾选备选参数的设备,MIUI12的小部分型号,部分模拟器,部分特殊安卓设备等。


4)如何在脚本中添加备选参数


如在IDE连接设备时,勾选了一些备选参数,则同学们在脚本中连接该设备,也要添加对应的备选参数。特别是使用此类设备在命令行运行脚本时,千万要记得将参数加在设备连接字符串上:


# 添加了3个备选参数的1个安卓设备
Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH
复制代码


37.Airtest的多图查找



Airtest没有提供专门的API给我们进行多图查找,但是我们可以用简单的语法来实现:


picList = [pic1,pic2,pic3]  # 截图的图片对象列表
for pic in picList:
     pos = exists(pic)
     if pos:
         touch(pos)
         break  # 只要找到图片列表中的任何一张图片,就执行touch
复制代码


38.poco的多元素查找



poco有专门的API实现了多元素等待:


# 等待多元素其中的任意一个元素出现
bomb = poco("bomb")
yellow = poco("yellow")
blue = poco("blue")
while True:
    fish = poco.wait_for_any([bomb,yellow,blue])
    print(fish.get_name())
# 等待多元素的所有元素都出现
poco.wait_for_all([yellow,blue,black])
复制代码


39.'NoneType' object has no attribute xxxx



这个报错可能出现在不同的方法里面,比如:


AttributeError: 'NoneType' object has no attribute 'snapshot'
AttributeError: 'NoneType' object has no attribute 'start_app'
复制代码


出现这些报错,基本上都是因为同学们在脚本中没有连接设备,所以只要在脚本开头,补充上连接设备的脚本即可。


40.怎么获取Windows窗口的句柄



1)在IDE的log窗口查看


在IDE中连接上该Windows窗口,然后随便运行1个自动化脚本,我们可以在log查看窗的最上面,看到运行该脚本的命令,其中包含Windows窗口的句柄:


image.png


2)使用网上的工具查看


使用VC或者VS里面tool中的SPY++,也可以查看窗口的句柄、名字、类、类型、大小和位置等。还有其它的一些方法和工具可以自行百度。


41.UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)



编码报错,一般情况下我们可以通过在脚本开头声明编码来规避这个问题:


# -*- encoding=utf8 -*-
复制代码


如该声明无效,脚本运行到某些 print 中文的语句中,还是会报这个错误,可以单独指定这个中文的编码:


s = '中文'
print(s.decode('utf-8'))


相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
6月前
|
安全 API 语音技术
Python 潮流周刊#25:性能最快的代码格式化工具 Ruff!
Python 潮流周刊#25:性能最快的代码格式化工具 Ruff!
75 1
|
运维 JavaScript 前端开发
鸽了 3 年的 Egg 3.0 带来了一个好消息!
鸽了 3 年的 Egg 3.0 带来了一个好消息!
236 0
|
Python
python植物大战僵尸十五之僵尸来袭(不同行)
python植物大战僵尸十五之僵尸来袭(不同行)
87 0
|
数据采集 Web App开发 IDE
玫瑰花变蚊子血,自动化无痕浏览器对比测试,新贵PlayWright Vs 老牌Selenium,基于Python3.10
Selenium一直都是Python开源自动化浏览器工具的王者,但这两年微软开源的PlayWright异军突起,后来者居上,隐隐然有撼动Selenium江湖地位之势,本次我们来对比PlayWright与Selenium之间的差异,看看曾经的玫瑰花Selenium是否会变成蚊子血。
玫瑰花变蚊子血,自动化无痕浏览器对比测试,新贵PlayWright Vs 老牌Selenium,基于Python3.10
|
JSON 测试技术 Android开发
基于AirTest+Python的ios自动化测试demo(微信朋友圈无限点赞)
AirTest相比Appuim有个好处就是可以对GUI图片进行捕捉和最新版本支持WebView(目前Appuim不支持iOS12的WebView进行Xpath抓取)
610 0
|
存储 安全 IDE
Python曝出15年“老洞”,绿盟君教你如何不“踩坑”
近日,Python的Tarfile模块中发现一个存在长达15年之久的漏洞,引起了大家的关注,一是存在时间比较久,最早在2007年就被披露并记录为CVE-2007-4559;二是可能影响超过35万个开源存储库。
263 0
Python曝出15年“老洞”,绿盟君教你如何不“踩坑”
|
Web App开发 JavaScript Java
​TypeScript 遭库开发者嫌弃;苹果秋季发布会时间确定;​​PyCharm 2022.2.1 发布| 思否周刊
​TypeScript 遭库开发者嫌弃;苹果秋季发布会时间确定;​​PyCharm 2022.2.1 发布| 思否周刊
173 0
|
Web App开发 数据采集 搜索推荐
大麦网抢票程序之Selenium的使用
大麦网抢票程序之Selenium的使用
1172 0
大麦网抢票程序之Selenium的使用
|
编解码 移动开发 IDE
Airtest 快问快答,你们想问的这里都有!(第 1 期)
Airtest 快问快答,你们想问的这里都有!(第 1 期)
693 0
|
安全 IDE 开发工具
答疑第四期 | 使用Airtest最常见的8大问题
答疑第四期 | 使用Airtest最常见的8大问题
557 0