#根据多个元素属性选取 poco(name="com.yunmall.lc:id/tab_me").click() #根据当前元素的多个属性值选取元素 poco(text="我",name="com.yunmall.lc:id/tab_me").click()
2.查找某个元素的直接子节点(注意:只能是儿子) child
poco(resourceId='com.yunmall.lc:id/gotologon').child(name='android.widget.ImageView').click()
注意:
child获得A节点下的子节点B,节点可能多个,默认取第一个
3.查找某个元素的后代元素(注意:类似于孙子)offspring
poco("CollectionView").child(type="Cell")[0].offspring(name="服饰",type="StaticText").click()
注意:
poco(“CollectionView”).child(type=”Cell”)[0].offspring(name=”云南风景”,type=”StaticText”).click()
当根据child().child()定位时,如果第二个child是前面一个的孙节点,不能定位到,要用offspring,child节点必须是上个节点的儿子节点,不能跨辈分
4. 兄弟节点 sibling
#根据哥哥的属性(name="com.yunmall.lc:id/textView5") 取name='com.yunmall.lc:id/logon_password_textview'兄弟节点 poco(name="com.yunmall.lc:id/textView5").sibling(name='com.yunmall.lc:id/logon_password_textview').click()
5.获取当前节点的父节点parent()
#根据儿子找父亲 poco(name="com.yunmall.lc:id/textView5").parent()
6.获取元素属性
#获取当前元素 pos属性的值 #a = poco(name="com.yunmall.lc:id/textView5").parent().attr('pos') #获取当前元素的名字 get_name() #a = poco(name="com.yunmall.lc:id/textView5").parent().get_name() #获取当前元素的文本信息 其实获取的是text属性的值 # poco(name="com.yunmall.lc:id/textView5").parent().get_text()
7.设置元素属性
#选取元素 输入内容为123 其实也是设置text属性的值 poco("pos_input").set_text("123") #设置text属性的值为456 poco("pos_input").setattr('text',"456")
8.判断控件是否存在,并进行操作
输出一个节点是否存在 返回 T F
print(obj.exists()) #判断密码框元素是否可见,可见则输入内容在输入内容 password_input = poco(name='com.yunmall.lc:id/logon_password_textview') if password_input.exists(): poco(name='com.yunmall.lc:id/logon_password_textview').set_text("123456")
9. 点击和长按
#点击 按钮 poco('NodeName').click() #长按 按钮 poco('NodeName').long_click() #长按按钮 指定时间 单位为s poco('NodeName').long_click(duration=5)
10.等待和停留
时间停留x秒,一般在一个交互完后都会写上大概1s左右的停留
time.sleep(x)
等待某个事件结束,直到某个节点出现
#等到3秒内出现 poco('nodeName').wait_for_appearance(timeout=3)
直到某个节点消失
node.wait_for_disappearance()
11.poco的坐标系
左上角(0,0),右下角(1,1),横坐标为x,纵坐标为y,点击节点的某个位置
#点击节点的中心点位置 poco(name='com.yunmall.lc:id/logon_password_textview').focus('center').click() #点击节点的靠近左上角位置 poco(name='com.yunmall.lc:id/logon_password_textview').focus([0.1, 0.1]).long_click() #点击节点的右下角位置 poco(name='com.yunmall.lc:id/logon_password_textview').focus([1, 1]).long_click()
12.拖拽和滑动
a.拖拽
从一个节点位置拖拽到另一个节点位置
poco('AeNodeName').drag_to(poco('BeNodeName'))
从列表的一端滑动到另一端
listView = poco('Scroll View') listView.focus([0.5, 0.7]).drag_to(listView.focus([0.5, 0.2]))
b.滑动
滑动列表
poco('Scroll View').swipe([0, -0.1]) poco('Scroll View').swipe('up')
从A点滑动到B点
x, y = poco('Scroll View').get_position() end = [x, y - 0.1] poco.swipe([x, y], end)
从A点向指定方向和定长移动
x, y = poco('Scroll View').get_position() dir = [0, -0.1] poco.swipe([x, y], direction=dir)
13.异常处理,poco中有4中异常处理方式
a. InvalidOperationException
无效操作,主要原因是选中和操作的UI在屏幕外
try: poco.click([1.1, 1.1]) # click outside screen except InvalidOperationException: print('【error】tips')
b. PocoNoSuchNodeException
对找不到的节点执行了操作或者获取属性,应该通过调用.exists()来避免这个异常报错的出现
try: node.click() except PocoNoSuchNodeException: print('oops!') try: node.attr('text') except PocoNoSuchNodeException: print('oops!')
两个例外:
node = poco('not existed node') # 只是获取一个节点不会触发异常 print(node.exists()) # => False. 该方法不会报出异常
c. PocoTargetTimeout
某个定时器结束时触发,但如果操作太快,节点还没显示在界面上,很可能是触发的PocoNoSuchNodeException
node= poco('node') try: star.wait_for_appearance(timeout=3) # wait until appearance within 3s except PocoTargetTimeout: print('oops!')
d.PocoTargetRemovedException
某个节点已经被删除时会触发
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/253612.html