1. 程式人生 > >Android自動化測試uiautomator

Android自動化測試uiautomator

Android自動化測試uiautomator框架

最近由於工作的需要,接觸了一些android端自動化測試的知識,這裡把化記錄一下,以備不時之需。這裡使用的是框架為uiautomator,使用的開發語言為python.這是因為現在大多數的測試框架都支援python,而且在寫一些小程式時python要比java好用一些。

初始化手機連線

在使用uiautomator時,需要事先初始化與手機連聯,不然怎麼操作手機上的應用呢。如果只使用一臺手機做測試機,則比較簡單,只需要一行程式碼就可以。

#初始化手機聯接
from uiautomator import device as
d

如果有多臺手機,則需要知道手機的device code,可以使用adb devices檢視,python程式碼如下

from uiautomator import Device
d = Device('014E05DE0F02000E')

確定控制元件位置

在使用自動化測試框架時,首先需要的是就取到需要操作控制元件的物件,當然可以直接使用座標進行操作,只是個人認為此種方式比較笨,並不推薦使用此方式。在uiautomator中,有多種方式可以取用控制元件的物件。

使用 d(text=’文字內容’) 查詢控制元件

使用d(text=’文字內容’)是相對來說比較簡單的獲取控制元件的物件的方式,不需要知道原始碼就可以命名用。詳細程式碼如下

#獲取測試按鈕
test_btn = d(text='測試按鈕')
#列印控制元件資訊(實際使用中不常使用)
print(test_btn.info)

此種方式常用於獲取按鈕。

使用id獲取控制元件物件

此種方需要開發的支援,或者需要有原始碼。使用如下。

  #查詢id為id_edit的控制元件並寫入資料abcdefg
  d(resourceId="com.autotest.demo:id/id_edit").set_text("abcdefg")
  print(test_btn.info)

常用操作

上面講到了獲取控制元件的一些方式,這裡就來說一些對控制元件的具體操作。其實在實際的使用中,對控制元件的使用不外乎點選、長按、輸入、滑動這幾種。這裡先介紹前三種

點選、長按、輸入

test_btn = d(text='測試按鈕')
#單擊事件
test_btn.click()
#長按事件
test_btn.long_click()
#此處為輸入操作
d(resourceId="com.autotest.demo:id/id_edit").set_text("abcdefg")

滑動操作

滑動操作相對於前幾種操作,相對來說比較複雜,所在單獨拿出來介紹。滑動用於模擬使用者的手勢操作。比如向左拉開抽屜,下接重新整理,手勢解鎖等。這裡可大至分為兩大類,

  • 兩點間的滑動,如下拉重新整理
  • 多點間的滑動,如手勢解鎖

如果只是兩點間的滑動,可以使用swipe方法,如果多點的滑動,則需要命名用swipePoints方法,說細請查年以下程式碼。

#兩點的xy座標,只能畫直線
d.swipe(100, 800, 600, 800)

#用於模擬複雜的手勢操作,
points = []
points.append([100,800])
points.append([200,800])
points.append([200,1100])
points.append([600,1100])
d.swipePoints(points)

特別是在使用swipePoints時,這裡是一個在坑的,那是就在方法的引數來看是需要傳一個points的集合,就本能的認為應該是point物件的集合,在引用進還真方法有個物件,於是我的程式碼就變成這樣了

from uiautomator import device as d
from uiautomator import point

points = []
points.append(point(100, 800))
points.append(point(200, 800))
points.append(point(200, 1100))
points.append(point(600, 1100))
d.swipePoints(points)

結果報錯了,糾結了好長時間,後來看了一個原始碼才知道,他需要的並不是point,是隻單純的表示一個點x,y的座標的陣列。

總結

以上就是關於uiautomator的一些基本使用。如果有什麼其它的,歡迎留言。