本文将以官网上的安卓游戏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"))
图片
本站仅提供存储作事,总计内容均由用户发布,如发现存害或侵权内容,请点击举报。