Airtest框架和Poco框架常见问题

2410 篇文章 33 订阅
1785 篇文章 18 订阅

Airtest

报告可以导出发给别人看吗

Airtest的报告是可以打包发给别人看的。

① 想要导出报告发给别人观看,我们需要生成报告的命令中传入 --export 参数,这样就可以将 包含静态资源文件和图片文件的报告 导出到一个指定的文件夹内,之后直接将整个文件夹发送给别人观看即可。

② 如果生成报告时不传入 --export 参数,那么报告中的静态资源文件和图片文件将使用 绝对路径 来访问,此时将整个文件夹发给别人观看,别人也是无法正常观看的。

如何在报告中显示报错信息

可以使用如下代码:

import traceback
try:
    xxxx
except:
     log("出错啦", traceback. format_exc())

图片

如何取消脚本执行过程刷新大量的log信息

在脚本运行的时候, Airtest 默认会刷新很多log信息,如下图所示:

图片

如果你不想这些log信息干扰你提取有效的报错信息时,你可以在脚本代码开头加上log级别的设定:

# -*- encoding=utf8 -*-
__author__ = "user"
import logging
logger = logging.getLogger("airtest")
logger.setLevel(logging.ERROR)
from airtest.core.api import *
auto_setup(__file__)

这样运行时只会在初始化手机时会有少量log输出,初始化完毕后就能够对logger进行过滤了。

用Airtest测试iOS一定要用macOS吗

① 使用 xcode 部署 iOS-Tagent或WDA 需要在macOS完成

② 部署好以后可以在macOS或Windows机器上连接到iOS手机进行测试

如何删除iOS输入框的内容

① 对于Android平台,我们可以使用多种方法来删除输入框的内容,比如使用 keyevent 接口:keyevent(“KEYCODE_DEL”) ;或者使用Poco的 set_text() 方法:poco(“xxx”).set_text(“”) ;

②但对于iOS平台来说,暂不支持 set_text() 接口,也不支持 keyevent(“KEYCODE_DEL”) ,所以这俩种方法对于iOS的输入框来说是无效的。而iOS是支持 text() 方法的,所以我们可以用 text(“\b”,False) (每次删除1个字符,删除后不执行 enter ),来实现iOS输入框内容的删除。

图片

自定义截图压缩精度

① 在本地运行脚本时自定义:

# quality取值[1,99],airtest默认取10,希望获得更高精度可以取值75
airtest run xxx --compress 75

② 在脚本中自定义(优先级高于在命令行自定义):
自定义全局的截图压缩精度:

import airtest.core.api import *
ST.SNAPSHOT_QUALITY = xxx

自定义单张截图的压缩精度:

snapshot(quality=my_quality)

Airtest支持多设备运行吗

输入密码时Airtest不显示密码键盘

脚本运行到输入密码时,手机弹出了安全键盘,但是在Airtest中却不显示这个安全键盘,这是为什么?

其实这个是正常现象,Airtest不会录制有安全键盘的画面,但是各种输入操作还是正常进行的。

Airtest如何局部截图、找图

Airtest局部截图+找图、截屏另存为

Airtest的多图查找

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

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

invalid syntax

典型的python语法错误,常见于脚本未换行、缩进错误、缺少 " 或者 ( 等。

怎么点击软键盘上面的搜索?输入后回车?

如需点击软键盘上面的 search 按钮,则:

text("文本",enter=False,search=True)

同理,如需输入后回车,则 text(“文本”,enter=True) ,不需要回车则, text(“文本”,enter=False) 。

不能输入密码?密码界面黑屏?

应用的登录页面或者密码界面一般都不给截屏录屏的,同学们可以检查看看你的测试设备的设置里面,有没有安全键盘、防止恶意截屏录屏之类的设置,关掉就行。

如果是App本身做的安全机制,需要让开发打一个测试的包看能不能去掉。

‘NoneType’ object has no attribute xxxx

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

AttributeError: 'NoneType' object has no attribute 'snapshot'

AttributeError: 'NoneType' object has no attribute 'start_app'

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

Poco

poco无限重启的解决办法

如果开了网络代理的话,需要先 关闭各种代理和VPN ,否则可能会影响到poco通讯

检查手机助手内是否对 pocoservice.apk 做了限制,例如在某版本的华为手机中需要开启 允许自启动 和 允许后台活动。

这里我们列举几个常见手机品牌的设置方式:

华为:手机管家-应用启动管理-PocoService.apk-手动管理,允许自启动开启,允许后台活动开启

OPPO:设置-电池-应用耗电管理-PocoService.apk-允许应用自启动,允许完全后台行为

VIVO:电池-后台高耗电-> PocoService 开启

一加:设置-电池优化-PocoService-不优化

当然,不同手机品牌,甚至同品牌不同型号手机的配置方式,都有可能不大一样,同学们要自己查找手机里面与 电池优化 和 后台活跃 相关的设置即可,保证给 pocoservice.apk 足够的活跃权限且不被电池优化行为干掉。

不能和uiautomator同时启动,否则会相互冲突

可以尝试 重启手机 / 重装pocoservice 看看是否会恢复

poco拿不到控件,poco的支持情况

目前只有原生应用可以直接使用poco(无需接入pocoSDK),非原生应用,比如各种游戏应用、H5小程序、混合开发的应用等,都不能直接使用poco拿取控件,绝大多数的游戏支持接入对应引擎的pocoSDK之后,可以获取控件信息。

poco定位报错找不到

有时候IDE自动生成的poco定位脚本会非常长,层级也非常深,回放时可能出现找不到控件的情况;这时不建议同学们直接使用自动生成的定位脚本,可以根据UI树详情,另外编写更精简的定位脚本,推荐使用正则匹配来进行脚本定位会好一些。

如果定位脚本是同学们自己编写的,请检查对应的属性或者层级关系,看是否是脚本错误而导致找不到元素。

如出现单独选中调试脚本,可以找到控件,但实际运行脚本又容易找不到控件,建议在该条定位脚本之前添加足够的 sleep() ,确保画面跳转稳定后,再来查找控件。

“远程主机强迫关闭了一个现有的连接”、“socket connection broken”

很多新手在使用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的时候,千万记住要检查下这几条代码的顺序,避免产生不必要的报错。

同一个脚本初始化多个poco(1个原生1个游戏)

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

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,就有可能导致奇奇怪怪的错误出现。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值