poco选取元素

1.获取控件保存变量

#根据多个元素属性选取
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

某个节点已经被删除时会触发

posted @ 2021-05-18 19:09  酒剑仙*  阅读(2313)  评论(0编辑  收藏  举报