Flutter-uiautomator2之自動化測試避坑(元素篇)


直接上需要注意的點

一、flutter開發的app一般不需要進行id定位

  1.最常用的元素定位是Description

  2.輸入框定位是text

  這兩個完全夠用了

二、通過xpath進行Description定位時會遇到以下問題:

  1.python -m weditor調出weditor后可能會遇到這樣的xpath

 

 

   這樣的xpath會讓你不得不使用resource-id進行定位,寫出來的代碼是這樣的

              d.xpath('//[@resourceid="android:id/content"]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.widget.ImageView[1]/android.view.View[2]/android.view.View[1]/android.view.View[2]/android.view.View[1]/android.view.View[1]/android.view.View[4]')

  但事實上,通過這個resource-id定位的元素也是可以用Description進行定位的

  可以先用print(d.dump_hierarchy(True)),打印出當前頁面的xml

  

 

   打印出了當前的“去登錄”元素是可以使用Description進行定位

  比如:d(description="去登錄")或者d.xpath(//*[@content-desc="去登錄"])

  2.如果你的content-desc遇到了這樣的符號:
---這代表的是flutter的換行符,你需要將其替換為‘\n’

三、 我的處理辦法

  封裝了一個方法,用來處理所有的description元素

  1.使用init方法,將d這個對象傳入,可以方便后續做數據驅動時實例化對象

  2.將xml進行過濾,找到所有符合我們界面看到的元素,然后進行字符串拼裝成xpath的參數

  3.最后可直接點擊

  4.如果遇到了某種手機在對應步驟后表現可能不同,比如:小米手機鍵盤在輸入后遮擋了下方元素,便可以使用return的false返回進行判斷,多進行操作一步再次點擊這個元素

class DescriptionClick(object):

def __init__(self, d, ele_id=0):
self.d = d
self.ele_id = ele_id

def click(self, ele_name):
elements_list = []
return_list = []
# 獲取xml
ele_xml = self.d.dump_hierarchy(True)
# 正則表達式
page_re = re.compile(r'content-desc="(.*?)" checkable="')
# 獲取匹配結果
ele_res = re.findall(page_re, ele_xml)
# 過濾空的元素,其他元素加入至elementsList
for i in ele_res:
if i == '':
continue
else:
elements_list.append(i)
# 將xml中的換行符替換為\n,並組合成xpath
for j in elements_list:
if j.startswith(ele_name):
xpath = '//*[@content-desc="' + str(j).replace('
', '\n') + '"]'
return_list.append(xpath)
# 直接點擊這個xpath
try:
self.d.xpath(return_list[self.ele_id]).click()
except IndexError:
return False
結尾:最初拿到flutter開發的應用時,我人傻了,appium很多的方法在app中無法使用,比如sendkeys這些常用必須的方法
我翻了很久的論壇,發現使用uiautomator2可以解決以上的問題
這個過程中遇到的各種坑數不勝數
但也一一解決了,希望幸運的小伙伴看到這篇文章可以有所啟發吧


免責聲明!

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



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