#根據多個元素屬性選取 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
某個節點已經被刪除時會觸發