2.Poco小技巧

一.需要引用前置测试用例

同模块/跨模块引用,均需要写相对路径,如下所示:

using(’…/一级目录/testcase1.air’)
import testcase1
1.先using,前面两个点必须有
2.import名字即可,不需要后缀名air
*在import时候就代表已经开始执行这条用例了

二.元素定位的方式

假设被测应用为普通原生app
优先使用text方式(要考虑多语言,手机系统语言)

text定位:poco(text="")
利用页面布局进行定位,可用方法如下,可灵活配合使用:
items = poco(text=‘main_node’).child(‘list_item’).offspring(‘name’)
items = poco(text=‘Scan Memory’).parent().children()
items[1].click()

三.断言

仅限使用以下四种方法进行断言:
参考资料:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html
在这里插入图片描述
1、等待UI元素
poco等待UI元素的方式有三种:等待一个元素,等待多个元素,等待任一元素

代码示例:
#定位三个元素
ele1 = poco(text=“text_content_1”)
ele2 = poco(text=“text_content_2”)
ele3 = poco(text=“text_content_3”)
等待一个元素出现:ele1.wait_for_appearance(timeout=10)
等待多个元素都出现:poco.wait_for_all([ele1,ele2,ele3])
等待任一元素出现:poco.wait_for_any([ele1,ele2,ele3])

2、滑动或拖动

拖动
#drag the “star” to the “shell”
poco(‘star’).drag_to(poco(‘shell’))
滑动
swipe the list view up
poco(‘Scroll View’).swipe([0, -0.1])
poco(‘Scroll View’).swipe(‘up’) # the same as above, also have down/left/right
poco(‘Scroll View’).swipe(‘down’)

x, y = poco(‘Scroll View’).get_position()
end = [x, y - 0.1]
dir = [0, -0.1]
poco.swipe([x, y], end) # 从A点滑动到B点
poco.swipe([x, y], direction=dir) # 从点A向给定方向和长度进行滑动

3、复杂层次的UI选择

说明:https://poco-chinese.readthedocs.io/zh_CN/latest/source/doc/poco-example/advanced_selections.html

items = poco(‘main_node’).child(‘list_item’).offspring(‘name’)

4、UI元素属性获取

poco(text=“text_content”).attr(“checkable”)

5、遍历UI

for star in poco(‘star’):
star.drag_to(shell)
time.sleep(1)

6、四种需要处理的异常

InvalidOperationException:这个异常特指无效的操作,或者说 不起作用的操作

try:
poco.click([1.1, 1.1]) # click outside screen
except InvalidOperationException:
print(‘oops’)
PocoNoSuchNodeException:如果从一个不存在的UI控件读取属性或控制它,那就会出现这个异常。测试一个UI控件是否存在可以调用UI代理的 .exists() 方法。

注解

如果只是选择了一个UI但是不去操作或者读取属性是不会产生异常的,因为选择UI只是将选择的条件存储下来,等到执行具体的操作时才会去game/app中查找和选择。
如果有个透明的UI或者你看不见(在屏幕外面或者尺寸为0),他同样也是存在的,同样也可以对他进行操作或者读取属性。只有不在hierarchy树中的才是不存在的。
在这里插入图片描述
PocoTargetTimeout:这个异常只会在你主动等待UI出现或消失时抛出,和 PocoNoSuchNodeException 不一样,当你的操作速度太快,界面来不及跟着变化的话,你只会遇到 PocoNoSuchNodeException 而不是 PocoTargetTimeout ,其实就是在那个UI还没有出现的时候就想要进行操作。
在这里插入图片描述
PocoTargetRemovedException:与上面 PocoTargetTimeout 不同,如果操作速度远远慢于UI变化的速度,那很可能会出现这个异常。这个异常仅当去访问或操作一个刚才还在但现在不在的UI控件才会出现,并且一般情况下基本不会出现。
在这里插入图片描述

安装Apk

pkg_list = shell("pm list packages")
if "com.tencent.qq" in str(pkg_list):
     log("已安装qq")
else:
	log(“开始安装qq”)
	apk_path = os.path.join(os.path.dirname(__file__),"qq.apk")  
	log("apk_path"+str(apk_path))
	install(apk_path)
     `
    ```

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值