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

某個節點已經被刪除時會觸發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM