Poco框架實操:對節點可實施的操作

AirtestProject發表於2024-05-23

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

一、前言

之前我們介紹了Poco的節點關係,以及獲取節點屬性的一些方法,具體詳情可以點選檢視我們歷史推文~今天我們就來看看我們對Poco節點還能進行什麼操作吧!

二、Poco節點操作詳解

2.1 修改文字類屬性值:setattr(typename, val)

在日常測試中,有些文字類屬性需要修改的時候,可以使用setattr(typename, val)這個方法,透過輸入屬性名以及需要修改進去的內容即可。但是需要注意的是,很多屬性如:namepos等等是不推薦修改的,尤其是editalbe為**False**的節點,不建議修改該節點的所有屬性,它們的修改可能會導致出現意外和誤報錯誤。

使用的方式如下:

poco("com.sonyericsson.conversations:id/conversation_edit_text").setattr("text","我要發簡訊")

2.2 輸入文字:set_text()

在日常輸入的時候,我們可以使用set_text()這個方法,但是在使用set_text()之前,需要先執行一遍click點選操作,啟用文字框後,再執行輸入操作。

使用方法如下:

poco("com.sonyericsson.conversations:id/conversation_edit_text").click()
poco("com.sonyericsson.conversations:id/conversation_edit_text").set_text("我要發簡訊")

如果在使用set_text()無法輸入,或出現相關報錯的話,可以更換使用Airtest的text()方法去進行輸入即可。

poco("com.sonyericsson.conversations:id/conversation_edit_text").click()
text("我要發簡訊")

2.3 設定節點焦點:focus(f)

跟Airtest的圖片一樣,在Poco節點也有一定的操作點範圍,且focus 所使用的是區域性歸一化座標系,因此同樣是UI框的左上角為原點,x軸向右,y軸向下,並且UI框長寬最大座標均為1。所以一般節點預設的操作點座標為[0.5, 0.5]

在日常使用過程中,使用比較多的場景有以下幾種情況:

2.3.1 內部偏移

如果需要對節點的UI框內的其他點進行操作的話,則需要利用focus重新自定義一個操作點,也就是設定內部偏移量,呼叫這個方法將返回已設定了新操作點的Poco節點,重複呼叫則以最後一次所呼叫的為準。

# 內部偏移
poco(texture="icon").focus([0.1,0.8]).long_click()

2.3.2 外部偏移

如果是需要對節點的UI框外的其他點進行操作的話,也可以透過focus去指定UI框外的偏移量,並且是會出現偏移量小於0或者大於1 的情況,但是要注意的是,在考慮外部偏移量的同時,也要注意該偏移量座標是否會超出螢幕範圍,否則會出現該報錯:InvalidOperationException('Click position out of screen

# 外部偏移
poco(text="pearl").focus([0.5,-3]).long_click()

更多關於focus的內容可以檢視PocoAPI文件以及官方教程文件的對應內容:

https://poco-chinese.readthedocs.io/en/latest/source/poco.proxy.html#poco.proxy.UIObjectProxy.focus

https://airtest.doc.io.netease.com/IDEdocs/poco_framework/4_poco_API/#7

2.4 拖拽:drag_to(target, duration=2.0)

說到拖動,大家第一反應應該是swipe(),但是swipe()是單純的從其中一個座標,滑動到另一個座標,但是drag_to()是完全不同的,首先拖動的是節點而不是普通的一個座標點,其次,拖動的終點是可以是另一個節點、同一個節點的不同UI位置、或者是某個座標點。

括號內所需要傳輸的變數為target:拖拽的終點(可以為節點,也可以為歸一化座標); duration=2.0:預設拖拽的持續時間為2秒。

歸一化座標參考下圖,以螢幕的左上角為原點建立座標軸,x軸向右,y軸向下,座標最大為1,更多詳情可檢視我們的教程文件:https://airtest.doc.io.netease.com/IDEdocs/poco_framework/2_API_word/#2-poco_1

使用方法如下:

poco('star').drag_to(poco('shell'))
poco("音樂").drag_to([0.5,0.5])

2.5 長按:long_click(duration = 2.0)

click類似,long_click()是對節點進行長按操作,可以傳入長按的持續時間引數duration,預設為2秒。

poco("音樂").long_click()

但如果想對某個座標點進行長按操作的話,可以選擇poco.pocofw module下的long_click(pos, duration=2.0),我們需要傳入裝置螢幕歸一化座標 pos 以及 長按的持續時間引數 duration 即可。

poco.long_click((0.5,0.5), duration=2.0)

2.6 雙擊:double_click(x, y)

雙擊操作在poco 1.0.92 及以上版本均能使用,可以在括號內輸入雙擊的偏移點座標,不填寫預設為雙擊節點的anchorPoint,如下:

poco("音樂").double_click([0.2,0.8])

三、實操小案例

看完上述的操作詳情後,讓我們用一個小小的案例來看看上述操作在實際操作中的具體效果吧~

參考程式碼如下:

# -*- 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)

#開啟網易雲音樂
start_app("com.netease.cloudmusic")
sleep(2.0)
poco("com.netease.cloudmusic:id/skipBtn").click()

#點選進入搜尋介面
poco("com.netease.cloudmusic:id/iconSearch").click()
sleep(1.0)

#【使用setattr】輸入“汪蘇瀧”
poco("com.netease.cloudmusic:id/search_src_text").setattr("text","汪蘇瀧")
sleep(1.0)

#點選搜尋按鈕,進行搜尋
poco("com.netease.cloudmusic:id/toSearch").click()
sleep(1.0)

#點選播放全部歌曲
poco("com.netease.cloudmusic:id/actionView").click()
sleep(1.0)

#【使用double_click】雙擊喜歡歌曲
poco("com.netease.cloudmusic:id/smallAlbumDisc0").double_click()

#退出歌曲播放詳情介面
poco("轉到上一層級").click()
sleep(1.0)

#【使用focus、drag_to】分別進行節點UI定位以及進行拖拽換歌
poco("com.netease.cloudmusic:id/tv_music").focus([0.8,0.3]).drag_to(poco("com.netease.cloudmusic:id/tv_music").focus([0.2,0.3]),duration = 1.0)
sleep(1.0)

#【使用long_click】長按複製歌曲名
poco(text="此生不換 (Live版)").long_click()

poco("com.netease.cloudmusic:id/copyBtn").click()

#點選上方搜尋框
poco("com.netease.cloudmusic:id/search_close_btn").click()

#【使用set_text】將剪下板的內容貼上在搜尋框內
poco("com.netease.cloudmusic:id/search_src_text").set_text(get_clipboard())

#點選搜尋
poco("com.netease.cloudmusic:id/toSearch").click()

四、小結

我們今天分享了一些對Poco節點比較常用的操作方法,其中包括:

  1. 修改文字類屬性值:setattr(typename, val)
  2. 輸入文字:set_text()
  3. 設定節點焦點:focus(f)
  4. 拖拽:drag_to(target, duration=2.0)
  5. 長按:long_click(duration = 2.0)
  6. 雙擊:double_click(x, y)

透過這些方法,我們可以更好地編寫Poco的自動化指令碼,也可以將操作更簡單化。如果同學們在使用Poco進行自動化測試的過程中,遇到了問題,或者有任何想要深入瞭解的知識點,歡迎在官方交流群裡告訴我們或者提交issue,也歡迎大家投稿。


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

官方答疑 Q 群:526033840

相關文章