Poco 框架實操:獲取節點屬性的高效技巧 (一)

fishfish-yu發表於2024-04-25

此文章來源於專案官方公眾號:“AirtestProject”\
版權宣告:允許轉載,但轉載必須保留原連結;請勿用作商業或者非法用途

一、前言

上期推文我們介紹了 Poco UI 樹下的節點關係,以及透過節點關係去尋找我們所需要節點的方法,那麼本週我們來分享一下,當我們尋找到所需要節點後,能獲取到什麼資訊呢?又怎麼去獲取呢?

二、Poco 節點的屬性操作

2.1 獲取控制元件文字屬性:get_text( )

在 UI 自動化測試中,獲取節點的文字資訊是常見的需求。Poco 框架提供了get_text()方法,它能夠輕鬆提取指定元素的文字內容。無論是按鈕上的提示文字,還是列表項的顯示內容,get_text() 都能一一捕獲,從而實現對節點的文字內容進行操作或展示。

poco("遊戲增強器").get_text()

2.2 獲取控制元件名字屬性:get_name()

get_name()方法可以幫助快速獲取元素的名稱,這對於識別和操作節點控制元件非常重要。透過使用該方法,可以方便地獲取到節點的名稱,從而更好地進行元素的定位和後續操作。

poco("文字輸入").get_name()

2.3 獲取控制元件尺寸大小屬性:get_size()

瞭解節點控制元件的尺寸對於測試控制元件的佈局和設計等至關重要。get_size()方法提供了一種簡便的方式來獲取元素的寬度和高度,可以確保元素在不同裝置和解析度上的正確顯示。

poco("文字輸入").get_size()

2.4 獲取控制元件的頂部、右側、底部和左側的歸一化座標系:get_bounds()

get_bounds()方法返回節點元素的邊界框引數,包括元素的頂部 (top)、右側 (right)、底部 (bottom) 和左側 (left) 這些與標準座標系中螢幕邊緣的歸一化座標。這些資訊可以用於截圖控制元件、點選控制元件等,可以更好地規劃自身的指令碼設計。

poco("文字輸入").get_bounds()

2.5 獲取控制元件位置大小屬性:get_position()

get_position()返回控制元件元素的中心座標,通常以相對座標(x,y)返回座標,透過獲取控制元件元素的中心座標,我們可以在需要的時候更快地定位到該位置,從而實現一些互動操作。

poco("播放").get_position()

2.6 獲取控制元件屬性:attr("type")

attr("type")方法可以檢索節點的特定屬性值,需要在括號內輸入所需要的屬性值(需要以字串的形式輸入),即可查詢到所需要的屬性值。當上述查詢屬性的語句都無法查詢到自己所需要的屬性值的情況下,可以透過attr("type")去進行查詢。

poco("文字輸入").attr("text")

三、實際使用案例

結合上述所講的獲取控制元件方法,我們用個小小的案例去演示一下日常使用的場景。

參考程式碼如下:

# -*- encoding=utf8 -*-
__author__ = "Airtest"

from airtest.core.api import *
auto_setup(__file__)


from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

#開啟網易雲音樂app
start_app("com.netease.cloudmusic")
sleep(6.0)


#【使用get_text】獲取當前輸入在搜尋框上的文字
tem = poco("com.netease.cloudmusic:id/searchHintText").get_text()
print("目前搜尋框內的文字是:" + tem)

#【使用get_name】獲取“每日推薦”在UI樹上的節點名
name = poco(text="每日推薦").get_name()
print("該控制元件的name為:" + name)

#點選進入每日推薦介面
poco(text="每日推薦").click()

#【使用get_size】獲取在“每日推薦”介面上的廣告大小
adsize = poco("com.netease.cloudmusic:id/daily_ad_banner").get_size()
print("該廣告位的長寬大小為:" + name)

#【使用get_bounds】獲取在“每日推薦”介面上的廣告頂部、右側、底部和左側的歸一化座標系
adbounds = poco("com.netease.cloudmusic:id/daily_ad_banner").get_bounds()
str(adbounds)
print(f"該廣告位的頂部、右側、底部和左側的歸一化座標系分別為:{adbounds}")
sleep(1.0)

#【使用get_position】獲取在“每日推薦”介面上的廣告位置座標
adpos = poco("com.netease.cloudmusic:id/daily_ad_banner").get_position()
str(adpos)
print(f"該廣告位的位置座標為:{adpos}" )
sleep(1.0)

#【使用attr去查詢】獲取在“每日推薦”介面上的廣告位置座標
adpos2 = poco("com.netease.cloudmusic:id/daily_ad_banner").attr("pos")
str(adpos2)
print(f"利用attr獲取的位置座標為:{adpos2}" )
sleep(1.0)

四、小結

本週我們介紹了 5 種查詢 Poco 節點屬性值的方式,其中包括:

1、get_text( )獲取節點的 text 屬性值

2、get_name( )獲取節點的 name 屬性值

3、get_size( )獲取節點的 size 屬性值

4、get_bounds( )獲取節點的頂部、右側、底部和左側的歸一化座標系

5、get_positions( )獲取節點的位置座標

6、attr("type")獲取所需要的屬性值

透過這些方法,我們能夠更深入地理解和使用 Poco 的 UI 樹節點,可以更進一步地完善自己的指令碼。如果同學們在使用 Poco 進行自動化測試的過程中,遇到了問題,或者有任何想要深入瞭解的知識點,歡迎在官方交流群裡告訴我們或者提交 issue,也歡迎大家投稿。後續我們會帶來更多精彩的有關 Poco 專題內容,請大家持續關注我們,敬請期待哦!


AirtestIDE 下載:airtest.netease.com/\
Airtest 教程官網:airtest.doc.io.netease.com/\
搭建企業私有云服務:airlab.163.com/b2b

官方答疑 Q 群:526033840

暫無回覆。

相關文章