咱们不错使用exists()步伐

咱们不错使用exists()步伐

四、Poco控件的中枢API教练¶ 1. 弁言¶

本文将以官网上的安卓游戏demo为例,下载地址 。下载完对应的 “demo game android” 以后,装置在待测的安卓手机上,启动游戏;再使用IDE伙同上待测手机,并在poco辅助窗遴荐 unity 步地,刷出UI树后即可运行测试。

莆田市中福贸易有限公司

图片莆田市力诚电子有限公司

阅读本文,你将了解poco控件的以下中枢API功能:

点击操作 滑动操作 读取和开辟控件的属性 判断元素是否存在 拖动操作 里面偏移和外部偏移(focus) 恭候事件 2. 控件点击操作¶

当今poco控件的赞助的点击操作包含单击和长按,双击和右键单击均未已毕。

# 控件单击
poco("star_single").click()
# 控件长按
poco('star_single').long_click()

图片

click() 和 long_click() 的API确信不错参看此荟萃:https://poco.readthedocs.io/zh_CN/latest/source/poco.drivers.std.inputs.html?highlight=click#poco.drivers.std.inputs.StdInput.click 。

Poco控件的双击和右键点击

当今Poco控件的双击double_click()和右键点击rclick()步伐均未已毕,同学们在使用时,会报错指示:NotImplementedError 。

3. 控件的滑动操作¶

Poco赞助对控件进行滑动操作,咱们需要先定位到这个控件,然后指定它按照某个所在滑动即可:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
auto_setup(__file__)

from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

# 向下滑动0.2个单元距离
poco("Handle").swipe([0,0.2])
sleep(1.0)
# 进取滑动0.2个单元距离
poco("Handle").swipe([0,-0.2])
sleep(1.0)
# 向下滑动0.1个单元距离
poco("Handle").swipe("down")
sleep(1.0)
# 进取滑动0.1个单元距离
poco("Handle").swipe("up")
sleep(1.0)

图片

控件滑动的API(swipe)确信,不错参看此荟萃:https://poco.readthedocs.io/zh_CN/latest/source/poco.proxy.html#poco.proxy.UIObjectProxy.swipe 。

4. 控件属性的读取和开辟¶ 1)控件属性的读取¶

咱们在IDE的poco辅助窗检索出来的控件属性,基本上齐不错通过 attr 接口读取出来:

图片

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
auto_setup(__file__)

from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

print("----------------")
print("name:"+poco("star_single").attr("name"))
print("type:"+poco("star_single").attr("type"))
print("texture:"+poco("star_single").attr("texture"))

图片

attr的确信不错参看此荟萃:https://poco.readthedocs.io/zh_CN/latest/source/poco.proxy.html#poco.proxy.UIObjectProxy.attr 。

另外,Poco还赞助使用特定的API赢得控件的某一属性值:

赢得控件的name属性:get_name 赢得控件的text属性:get_text 赢得控件的position属性:get_position 赢得控件的size属性:get_size ......
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
auto_setup(__file__)

from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

print("----------------")
print("name:"+poco("star_single").get_name())
print("position:"+str(poco("star_single").get_position()))
print("size:"+str(poco("star_single").get_size()))

图片

此类API的确信,咱们不错参看此荟萃的内容:https://poco.readthedocs.io/zh_CN/latest/source/poco.proxy.html?highlight=get_#poco.proxy.UIObjectProxy.get_name 。

2)开辟控件的属性值¶

往往咱们需要开辟元素属性的情况,便是开辟文本框的文本属性(输入文本),不错使用 set_text() 步伐概况 setattr() 步伐:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
auto_setup(__file__)

from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

# 先激活输入光标
poco("pos_input").click()

# 再扩充输入行动
poco("pos_input").set_text("123")
sleep(1.0)
poco("pos_input").setattr('text',"456")

图片

这两步伐的API确信不错参看此荟萃:https://poco.readthedocs.io/zh_CN/latest/source/poco.proxy.html?highlight=set#poco.proxy.UIObjectProxy.set_text 。

但若是咱们强行开辟不能修改的元素属性,就会报 InvalidOperationException 的不实:

图片

5. 判断控件是否存在¶

判断控件是否存在,咱们不错使用exists()步伐,它给咱们复返的是布尔值,诈欺这少许,咱们不错作念好多应用。

1)控件存在则xx,不存在则yy¶

最常见的应用便是,若是控件存在,咱们就点击它,不然就作念别的操作,比如打印一条控件不存在的信息之类的:

if poco("star_single").exists():
    poco("star_single").click()
else:
    print("未找到星星控件")

分辩Poco和Airtest的exists

Poco和Airtest框架齐有一个exists步伐,但咱们需要分辩它们俩者的用法,Airtest的exists是用于判断图片存在,exists(图片);而Poco的exists是用于判断控件存在,poco(xxx).exists()。

2)断言控件存在¶

诈欺控件存在复返的布尔值,咱们不错机密地结合Airtest的断言极端, 于田县成欧食用油有限公司来断言控件存在:

assert_equal(poco("star_single").exists(),韶关市为香料有限公司True,"断言星星控件存在")

exists的步伐确信,咱们不错参考此荟萃的内容:https://poco.readthedocs.io/zh_CN/latest/source/poco.proxy.html?highlight=exists#poco.proxy.UIObjectProxy.exists 。

6. 控件的拖动¶

控件的drag_to() 步伐,绝顶不错是一个元素控件,也不错是一个固定的相对坐标:

# 拖动到另一个控件上
poco("playDragAndDrop").child("star")[0].drag_to(poco("shell"))

# 拖动到固定指标上
poco("playDragAndDrop").child("star")[1].drag_to([0.503, 0.705])

图片

drag_to的API确信,咱们不错参考此荟萃的内容:https://poco.readthedocs.io/zh_CN/latest/source/poco.proxy.html#poco.proxy.UIObjectProxy.drag_to 。

7. 控件的表里部偏移¶

在之前的文档里面咱们就提到过,poco使用的坐标系是 相对坐标系 。举个例子,咱们选中下图的pearl图片控件,此时的坐标系便是相对这个控件的坐标系,况且是从0到1进行归一化的。

对这个控件进行点击操作,实践上点击的坐标是控件上(0.5,0.5)的位置:

poco(texture="icon").click()

图片

1)里面偏移¶

若是选中控件之后,你并不思点击控件的中心位置,而是思点击控件里面的其它位置,咱们不错使用 focus() 步伐来指定里面偏移量:

# 里面偏移
pearl = poco(texture="icon")
pearl.focus('center').long_click()
sleep(1.0)
pearl.focus([0.1,0.1]).long_click()
sleep(1.0)
pearl.focus([0.9,莆田市力诚电子有限公司0.9]).long_click()

图片

2)外部偏移¶

选中1个控件以后,若是咱们思点击控件以外的位置,也不错使用 focus() 步伐来指定外部偏移量;况且会出现 点击坐标的值小于0概况大于1 的情况:

图片

如上图所示,咱们选中了 pearl 这个文本控件,关联词咱们思要去点击文本控件上方的图标,此时 focus 里面的Y坐标便是负数;因为联系于这个文本控件来说,上方图标的Y坐标仍是小于0了:

# 外部偏移
pearl_text = poco(text="pearl")
pearl_text.focus([0.5,-3]).long_click()

图片

同理,若是点击该文本控件正下方比拟远的位置,Y坐标就有可能大于1;当Y坐标大到超出现时屏幕时,就会报错: InvalidOperationException('Click position out of screen. 。

focus() 步伐的API确信不错参看此荟萃:https://poco-chinese.readthedocs.io/en/latest/source/poco.proxy.html?highlight=focus#poco.proxy.UIObjectProxy.focus 。

8. 控件的恭候事件¶ 1)仅恭候不报错¶

咱们不错使用wait步伐,指定期间恭候控件出现,再进行点击操作(该步伐的复返值是控件自己,是以后头不错紧跟控件操作,比如点击、长按):

# 在10s内恭候控件出现,如出现,则进行长按操作
poco(texture="icon").wait(timeout=10).long_click()

图片

wait的API确信,不错参看此荟萃:https://poco.readthedocs.io/zh_CN/latest/source/poco.proxy.html#poco.proxy.UIObjectProxy.wait 。

控件的wait步伐

需要顾惜的是,Poco控件的wait步伐,即使在设定期间内未找到控件,亦然不会报错的,不错不息往下扩充下去。另外咱们需要分辩下Airtest的wait步伐,恭候图片指标出现wait(图片);和Poco控件的wait步伐,恭候控件出现poco(xxx).wait(timeout=3)。

2)恭候,不浪漫则报错¶

Poco控件还赞助另外2个恭候事件,wait_for_appearance()和wait_for_disappearance();这两个API不错匡助咱们恭候页面上 某1个UI 出现概况隐没,恭候的超往往间 timeout 默许为120秒,若是在超往往长之内元素莫得出现概况隐没的话,会报 PocoTargetTimeout 的不实。

# 恭候黄色小鱼出现
poco("yellow").wait_for_appearance(timeout=20)

# 恭候计分文本控件隐没
poco(text="Count:").wait_for_disappearance(timeout=3)

图片

两个步伐的API确信参考荟萃:https://poco-chinese.readthedocs.io/en/latest/source/poco.proxy.html?highlight=wait_for_appearance#poco.proxy.UIObjectProxy.wait_for_appearance 。

3)拓展:Poco类的恭候事件¶

这里咱们拓展一个Poco类的恭候事件,wait_for_any()和wait_for_all()。与上述恭候事件不同的是,wait_for_any() 和 wait_for_all() 不错给定多个UI对象让其恭候。(需要顾惜这两个步伐是Poco类的步伐)

wait_for_all() 是在超往往长松手之前,需要 恭候总计给定的UI对象齐流露出来 ,即一次轮询总计UI,举例恭候三个图标齐流露之后,再点击复返按钮:

poco("wait_ui2").click()
yellow = poco("yellow")
blue = poco("blue")
black = poco("black")

poco.wait_for_all([yellow,blue,black])
poco("btn_back").click()

图片

wait_for_any() 则是在超往往长松手之前,恭候淘气一个UI流露出来,即一次轮询任何一个给定的UI,举例:

bomb = poco("bomb")
yellow = poco("yellow")
blue = poco("blue")

while True:
    fish = poco.wait_for_any([bomb,yellow,blue])
    print(fish.get_name())

图片

不错看到,惟有页面出出现了恭候的任一UI,wait_for_any() 步伐齐会复返第一个恭候到的UI。

俩步伐的API确信参考荟萃:https://poco-chinese.readthedocs.io/en/latest/source/poco.pocofw.html?highlight=wait_for#poco.pocofw.Poco.wait_for_any 。

9. 遍历元素¶

通过python的for轮回,咱们不错 遍历任何序列的姿首 ,如一个列表概况字符串。

举个例子,poco("playDragAndDrop").child("star") 得到的便是1个控件序列(包含了5个星星元素), star 代表控件序列中的1个元素。因此通过这个轮回,咱们就遍历了5个星星元素的序列,并把每个星星元素挨次拖动到贝壳上:

for star in poco("playDragAndDrop").child("star"):
    star.drag_to(poco("shell"))

图片

本站仅提供存储作事,总计内容均由用户发布,如发现存害或侵权内容,请点击举报。

上一篇:没有了