Appium+python自動化(二十二)- 三個臭皮匠頂個諸葛亮-控制元件座標獲取(超詳解)

巨集哥發表於2019-07-22

簡介

  有些小夥伴或者是童鞋可能會好奇會問上一篇中的那個monkey指令碼里的座標點是如何獲取的,不是自己隨便蒙的猜的,或者是自己用目光或者是尺子量出來的吧,答案當然是:NO。獲取控制元件座標點的方式這裡巨集哥給小夥伴們分享和講解三種方法(也就是三個臭皮匠),巨集哥個人喜歡第二種,也推薦小夥伴們和童鞋們使用第二種,當然了蘿蔔青菜各有所愛,這裡不做強制要求。小平同志不是說過:不管白貓還是黑貓抓住耗子就是好貓。適合自己才是最好的,小夥伴們可以根據自己的喜好自行選擇。

獲取控制元件的座標點方法

第一種方法(MonkeyRecorder獲取座標)

    下面就MonkeyRecorder獲取座標的方式,進行演示。MonkeyRecorder是一個比較好用的獲取座標的工具,它是用來獲取真機或模擬器上座標的工具,當我們點選真機或模擬器上的空間時,就能顯示真機或模擬器上的點選點的座標。

(1)MonkeyRecorder的啟動

1.首先安卓手機連線上電腦,並保證以下兩個條件成立:

a.終端USB調成開發者模式

b.電腦安裝手機驅動

2.手機連線成功後,開啟cmd視窗,輸入adb devices檢視已連線真機或模擬器裝置的名稱,我們這裡仍以夜神模擬器為代表。如圖:

 

3.在cmd視窗,輸入monkeyrunner後,啟動Monkeyrunner。做以下操作:匯入MonkeyRecorder包、連線模擬器裝置、以MonkeyRecorder方式啟動模擬器,並依次輸入

如下命令:

1 from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
2 
3 from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder
4 
5 device=MonkeyRunner.waitForConnection()
6 
7 recorder.start(device)

 

 

4.到此,MonkeyRecorder正式啟動。截圖如下。

 

(2)MonkeyRecorder的使用

1.我們這裡只是使用MonkeyRecorder來記錄座標,獲取座標的方式很簡單。比如qq的登入介面,點選“登入”按鈕,右側就會顯示該按鈕的座標;同樣,點選賬號輸入框或密碼輸入框,右側同樣會顯示座標。這個座標就是我們需要獲得的座標。

 

2.同時,MonkeyRecorder中的介面是同模擬器頁面保持一致的,在MonkeyRecorder中觸發任一操作,模擬器上會有相應的觸發。如果兩者沒有保持一致,則點選MonkeyRecorder右上角的Refresh Display即可重新整理頁面。

 

第二種方法(Uiautomatorviewer)

  網上很多推薦獲取座標點的方式,是使用 android-sdk/tools 目錄下,提供的 uiautomatorviewer 工具來獲取。但是這種方式非常的繁瑣,而實際上,我們又不需要如此精確的座標點,畢竟控制元件那麼大,只要點選的座標落在控制元件的位置上,即可。

Uiautomatorviewer是Android sdk自帶的工具,位置在sdk/tools下。

工具開啟方法:

1.sdk/tools下,找到uiautomatorviewer,雙擊開啟

2.在cmd命令列,直接輸入uiautomatorviewer,開啟該工具

開啟該工具後,我們就可以開始使用了。

執行環境:Windows

使用方法:

1.連線模擬器或真機(我們這裡使用模擬器)

2.開啟模擬器中指定的app,在uiautomatorviewer中截圖指定頁面

3.截圖成功後,頁面顯示如下:

需要注意的是,你的手機裝置或模擬器的api要在16以上,也就是android版本得是4.1以上,因為這個工具是google在4.1以後推出來的,只適用於4.1以後的版本

4.結果分析

從上圖中,可以獲取到對應控制元件的ID及控制元件左上角、右下角的座標。

1)對於控制元件座標而言,這裡很簡單,我們一般取中點座標,即:

中點座標=((左上角橫座標+右下角橫座標)/2,(左上角縱座標+右下角縱座標)/2)

如,上圖中,中點座標即((30+1009)/2,(268+314)/2)=(519.5,291)

注:座標一般取整。

由此,我們可以得到所需控制元件的座標,在指令碼中,直接touch該點座標即可。

2)對於控制元件ID而言,即上圖中的紅色框中部分,同樣在指令碼中,直接touch該ID即可。

另外,利用uiautomatorviewer還可以獲取父級與子級控制元件之間的關係,獲取到的關係同HierarchyViewer保持一致。

uiautomatorviewer就介紹到這裡。 

第三種方法(Pointer location獲取座標)

  那麼我推薦另外一種更簡單的方式,來獲取當前你看見的,在待測試裝置上的控制元件的座標點的定位方式。那就是利用 Android 裝置的開發者選項。

這裡以夜神模擬器為例:

1.點選設定

 

2.點選開發者選項

 

3.在指標位置 ,將這個屬性開啟之後,當手指在螢幕上滑動的時候,就可以在頂部看到當前觸控點的 X、Y 軸的座標,這就是我們需要的。

 

注意:開發者選項不是預設可見的,你需要自行開啟開發者模式,之後再進行此操作。(這不是可以上網自已查一下,如果是夜神模擬器,可以參考巨集哥的小結部分開啟開發者選項)

小結

(1)安卓系統開啟開發者模式方法很多,我們模擬器是6.3.0.0版本這裡只講適合夜神模擬器的方法,
  接下來進入圖文教程:

  1.點選設定
1.png 

  2.點選關於平板電腦
2.png 

  3.點選7下版本號(手殘請點選20下),點選箭頭指向處的版本號(最底下的版本號),而不是上面的Android版本號
3.png 

  4.返回設定選單
4.png 


5.png 

6.png 

  這裡補充一點,如果感覺開發者這個選項礙眼,可以選擇關閉,關閉方法:

  設定--應用--全部--找到設定軟體,點選進入--清除資料
  這樣開發者模式又隱藏了~~
7.png 



  教程到此結束O(∩_∩)O~~

相關文章