UiAutomator(2)--UiDevice API

UiAutomator(2)--UiDevice API

一、UiDevice介紹

       1.UiDevice代表設備狀態,爲單例模式。UiDevice的功能包括:

          (1)獲取設備信息:屏幕分辨率,旋轉狀態,亮滅屏狀態等

          (2)操作:案件,座標操作,滑動,拖拽,滅屏喚醒屏幕,截圖等

          (3)監聽器功能

       2.UiDevice寫法有兩種,推薦第一種方式,第二種可能會引起某些問題而導致無法運行:

           (1)UiDevice.getInstance().pressHome();

           (2)getUiDevice().pressHome();


二、API使用

       1. 按鍵相關的API,常用的按鍵包括HOME,MENU,BACK,VOLUME_UP,VOLUME_DOWN,RecentApps,POWER等

             (1)pressBack():模擬短按返回back鍵

             (2)pressEnter():模擬短按回車鍵

             (3)pressDelete():模擬短按刪除delete按鍵

             (4)pressHome():模擬短按HOME鍵

             (5)PressMenu():模擬短按menu鍵

             (6)pressRecentApps():模擬斷案最近使用程序

             (7)pressSearch():模擬短按搜索鍵

             (8)pressKeyCode(int keycode,int metaState):模擬短按鍵盤代碼keycode

                  pressKeyCode(int keyCode):模擬短按鍵盤代碼keycode

                  KEYCODE,鍵盤映射碼,具體見鏈接:KeyCode

                  KeyEvent,爲按鍵事件,具體見鏈接:Keyevent

                  metaState爲META key的狀態。META key是輔助功能鍵,即ALT、SHIFT、CAPS_LOCK。

                  metaState有四種狀態,分別如下:

                  

         2.獲取座標與座標點擊相關API

               (1)click(int x,int y):使用座標點擊屏幕

               (2)getDisplayHeight():返回值爲int,獲取屏幕高度

               (3)getDisplayWidth():返回值爲int,獲取屏幕寬度

               (4)getDisplaySizeDp():返回值爲Point,獲取顯示尺寸返回大小(設備獨立像素,屏幕旋轉返回的顯示大小調整)                     DP:設備獨立像素,例如,320像素顯示到640像素上要拉昇一倍

         3.拖拽與滑動相關API

               (1)drag(int startX,int startY,int endX,int endY,int steps):拖動對象從一個座標拖拽到另一個座標

               (2)swipe(Point[] segments,int segmentSteps):在點陣列中滑動,5ms一步

               (3)swipe(int startX,int startY,int endX,int endY,int steps):通過座標滑動屏幕

         4.旋轉屏幕API

                (1)setOrinentationLeft():通過禁用傳感器,然後模擬設備向左轉,並且固定位置

                (2)setOrientationNatural():通過禁用傳感器,然後模擬設備轉到其自然默認方向,並且固定位置

                (3)setOrienttationRight():通過禁用傳感器,然後模擬設備向右轉,並且固定位置

                (4)unfreezeRotation():重新啓用傳感器和允許物理旋轉

                (5)isNaturalOrientation():檢測設置是否處於默認旋轉狀態

                (6)getDisplayRotation():返回值爲int,返回當前的顯示旋轉,0度,90度,180度,270度,值分別爲:0、1、2、3.

                (7)freezeRotation():禁用傳感器和凍結裝置物理旋轉在其當前旋轉狀態

         5.滅屏與喚醒屏幕API

                (1)wakeUp():模擬按電源鍵,如果屏幕是喚醒的沒有任何作用

                (2)sleep():模擬按電源鍵,如果屏幕已經是關閉的則沒有任何作用

                (3)isScreenOn():檢查屏幕是否亮屏

          6.截圖與等待空閒API

                 (1)takeScreenshot(File storePath):把當親啊窗口截圖並將其存儲爲png默認1.0f的規模(原尺寸)和90%質量,參數爲file類的文件路徑

                 (2)takeScreenshot(File storePath,float scale,int quality):把當前窗口截圖爲png格式圖片,可以自定義縮放比例與圖片質量

                      storePath:存儲路徑,必須爲png格式

                      Scale:縮放比例,1.0爲原圖

                      Quality:圖片壓縮質量,範圍爲0-100

                 (3)waitForIdle(lonog timeout):自定義超時等待當前應用處於空閒狀態

                  (4)waitForIdle():等待當前應用處於空閒狀態,默認等待10s

                  (5)waitForWindowUpdate(String packageName,long timeout):等待窗口內容更新事件的發生

            7.獲取包名&開啓通知欄&快速設置&獲取佈局文件相關API

                  (1)getCurrentPackageName():獲取當前界面的包名

                  (2)dumpWindowHierarchy(String fileName):獲取當前界面的佈局文件,保存在/data/local/tmp/目錄下

                  (3)openNotification():打開通知欄

                  (4)openQuickSettings():打開快速設置


三、以自己公司的app爲實例

package cn.microinvestment.weitou;

import java.io.File;import java.io.IOException;import android.os.RemoteException;import android.view.KeyEvent;import com.android.uiautomator.core.UiDevice;import com.android.uiautomator.core.UiObject;import com.android.uiautomator.core.UiObjectNotFoundException;import com.android.uiautomator.core.UiSelector;import com.android.uiautomator.testrunner.UiAutomatorTestCase;public class UiDeviceDemo extends UiAutomatorTestCase {    public static void main(String[] args) throws IOException {        Runtime.getRuntime().exec("adb shell am start -n "                + "cn.microinvestment.weitou/cn.microinvestment.weitou.activity.WTLoginControllerActivity");        new UiAutomatorHelper("uiobject", "cn.microinvestment.weitou.UiDeviceDemo", "test", "4");    }    public void test() throws UiObjectNotFoundException, RemoteException{        //登錄按enter鍵(密碼用kecode,123456)-獲取屏幕高度和寬度-從下往上滑動資訊列表-判斷屏幕是否亮,是就滅屏,不是就喚醒        //-截圖-獲取包名-獲取當前界面的佈局文件-打開通知欄        UiObject loginbtn=new UiObject(new UiSelector().text("登錄"));

       UiObject username=new UiObject(new UiSelector().resourceId("cn.microinvestment.weitou:id/login_phone"));        UiObject password=new UiObject(new UiSelector().resourceId("cn.microinvestment.weitou:id/login_password"));        if(loginbtn.exists()){        loginbtn.clickAndWaitForNewWindow();        //輸入登錄帳號        username.setText("14900765791");        //點擊密碼框        password.click();        //用keycode輸入123456        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_1);        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_2);        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_3);        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_4);        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_5);        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_6);        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_ENTER);        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_ENTER);        UiDevice.getInstance().waitForIdle();        //用keycode按enter鍵        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_ENTER);        UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_ENTER);        //默認等待10s        UiDevice.getInstance().waitForIdle();        }        //獲取屏幕的寬和高        int x=UiDevice.getInstance().getDisplayWidth();        int y=UiDevice.getInstance().getDisplayHeight();        //從下向上滑動        UiDevice.getInstance().swipe(x/2, y-200, x/2, 200, 100);        UiDevice.getInstance().waitForIdle(20000);        //判斷屏幕是否亮        if(!UiDevice.getInstance().isScreenOn()){            UiDevice.getInstance().wakeUp();        }        UiDevice.getInstance().waitForIdle(5000);        //截圖        UiDevice.getInstance().takeScreenshot(new File("/sdcard/test.png"));        //獲取當前的包名        System.out.println(UiDevice.getInstance().getCurrentPackageName());        //獲取當前的佈局        UiDevice.getInstance().dumpWindowHierarchy("1.xml");        //打開通知欄        UiDevice.getInstance().openNotification();    }}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章