poco的元素定位搞不定?速來看看這3個選擇器


前言

之前交流群的很多童鞋問過關於 元素定位 的問題,比如:有哪些屬性可以拿來定位元素?利用節點屬性無法定位元素時應該怎么處理?為什么明明存在的節點還會報找不到?...

所以我們特意整理了這篇文章,向大家詳細講述幾種poco元素定位的方式,希望能方便大家在實際項目中靈活運用。

借助IDE的poco輔助窗生成元素定位腳本

AirtestIDE的 poco輔助窗 給我們提供了很多種方式來生成元素定位的腳本。最簡單的方法是,點擊poco輔助窗里面的 錄制按鈕 ,然后再點擊下目標元素:

image

這樣腳本編輯窗就會自動生成一條點擊控件的腳本,除去腳本中點擊操作的代碼,剩下的 poco("star_single") ,就是定位到黃色星星圖片元素的代碼了。

當然,我們還可以使用錄制按鈕旁邊的倆個 檢視器 按鈕來幫助我們定位元素。這兩個檢視器按鈕的區別在於,是否鎖定當前頁面:

我們可以看到,隨着檢視器定位到某個元素,輔助窗里面的UI樹也會隨着定位到相應的元素上,這時我們可以雙擊UI樹對應的位置,即可在腳本編輯窗自動生成定位元素的腳本:

利用基本選擇器進行元素定位

從上文中我們可以看到,IDE自動幫我們生成的元素定位腳本,都是 poco("xxx") 這種形式的。

其實在poco實例后加一對括號,我們就可以進行元素選擇了。選擇器會遍歷所有元素,將滿足給定條件的元素都選出來並返回。

括號里的參數就是所給定的條件,用屬性名值對表示,其中第一個參數表示 節點名 ,就像 poco("star_single") 。后面還可以跟着一些可選參數,均表示 節點的屬性及預期的屬性值 :

poco("star_single",type="Image")

利用相對選擇器進行元素定位

如果直接用節點屬性(或者說僅僅使用基本選擇器)沒法選出你所想要的元素時,你還可以通過元素之間的渲染層級關系進行選擇,例如父子關系、兄弟關系、祖先后代關系等等:

poco("plays").child("playBasic").offspring("star_single")

更多關於父子關系、兄弟關系的方法API可以到這個頁面上查看:https://poco.readthedocs.io/zh_CN/latest/source/poco.proxy.html?highlight=offspring#poco.proxy.UIObjectProxy.offspring

利用空間順序選擇器進行元素定位

按照序號(順序)進行選擇總是按照空間排布順序,先從左往右,再像之前那樣一行一行從上到下。如下圖所示,我們利用選擇器選中了很多個 type="Text" 的元素,然后再利用索引順序逐個選中單個元素:

name0 = poco("Content").child(type="Text")[0].get_name()
name1 = poco("Content").child(type="Text")[1].get_name()
name2 = poco("Content").child(type="Text")[2].get_name()

print(name0+" "+name1+" "+name2)

索引選擇有個特例,一旦進行選擇后,如果元素的位置發生了變化,那么下標序號仍然是按照選擇的那一瞬間所確定的值。即,如果選擇時①號元素現在去到了③號的位置,那么還是要用 poco(...)[0] 來訪問,而不是 poco(...)[2] 。

如果選擇了之后,某個元素消失了(從界面中移除或者隱藏了),那么如果再訪問那個元素則可能會發生異常,其余的元素仍可繼續訪問。

小結

在實操過程中,我們並不需要拘泥於使用某一種選擇器來進行元素定位,相反我們可以結合實際情況,使用多種選擇器來幫我們准確定位到某個元素。

另外,有時候錄制功能幫助我們生成的定位腳本非常長,定位層級關系過於復雜,就很容易產生以下報錯:

這時我們可以根據UI樹的結構,自己換一種沒那么復雜的元素定位方式。

 


 

Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b

 

 


免責聲明!

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



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