1.UiDevice API 詳細介紹


1.UiDevice按鍵與keycode使用

 

返回值

方法名

說明

boolean pressBack() 模擬短按返回back鍵
boolean pressDPadCenter() 模擬按軌跡球中點按鍵
boolean pressSPadDown() 模擬軌跡球向下按鍵
boolean pressDPadLeft() 模擬軌跡球向左按鍵

boolean

pressDPadRight() 模擬軌跡球向右按鍵
boolean pressDPadUp() 模擬軌跡球向上按鍵
boolean pressDelete() 模擬短按刪除delete按鍵
boolean pressEnter() 模擬短按回車enter鍵
boolean pressHome() 模擬短按home鍵
boolean pressKeyCode(int keyCode,int metaState) 模擬短按鍵盤代碼keycode
boolean pressKetCode(int keyCode) 模擬短按鍵盤代碼keycode
boolean pressMenu() 模擬短按menu鍵
boolean pressRecentApps() 模擬短按最近使用程序
boolean pressSearch() 模擬短按搜索鍵

 

  • 例如:

 

UiDevice.getInstance().pressHome();//點擊Home鍵 

UiDevice.getInstance().pressBack();//點擊返回鍵

 

  • keycode使用
meta_key未被激活 0
shift或caps_lock被激活時 1
alt被激活 2
alt,shift或caps_lock同時被激活時 3
 
  • 例如:
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);//輸入小寫a 

UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A,1);//輸入大寫a

2.獲取坐標與坐標點擊

  • 手機屏幕坐標也就是手機屏幕從屏幕左上角到右下角的像素
  • 坐標相關API:

 

返回值

方法名

說明

boolean click(int x,int y) 使用坐標點擊屏幕
int getDisplayHeight() 獲取屏幕高度
point grtDisplaySizeDp() 獲取顯示尺寸返回顯示大小(設備獨立像素)
int getDisplayWidth() 獲得屏幕寬度

  

  • 例如:

 

int w=UiDevice.getInstance().getDisplayWidth();//獲取屏幕寬度

    int h=UiDevice.getInstance().getDisplayHeight();//獲取屏幕高度

    UiDevice.getInstance().click(h/2, w/2);//點擊屏幕中心點

4.拖拽與滑動

  • 拖拽:將一個組件從一個坐標移動到另一個坐標處
  • 滑動:從一個坐標點移動到另一個坐標點
  • 步長:從一點滑動到另一點使用的時間(1步長=5毫秒,1秒=1000毫秒);步長越長,即兩點之間移動越慢

返回值

方法名

說明

boolean drag(int startX,int startY,int endX,int endY,int steps) 拖動對象從一個坐標移動到另一個坐標
boolean swipe(Point[] segments,int segmentSteps) 在點陣列中滑動,5ms一步
boolean swipe(int startX,int startY,intendX,int endY,int steps ) 通過坐標滑動屏幕

 

  • 例如:
//1.拖動對象從一個坐標移動到另一個坐標

public void testDrag(){

    //[64,417][128,480] 找到坐標位置先

    int startX, startY, endX, endY, steps;                          

    startX=(128-64)/2+64;                                           

    startY=(480-417)/2+417;

    endX=startX=(128-64)/2+64;

    endY=startY-200;

    steps=30;

    UiDevice.getInstance().drag(startX, startY, endX, endY, steps);

}
//2.通過坐標滑動屏幕

public void testSwipe(){

    int h=UiDevice.getInstance().getDisplayHeight();        //獲取屏幕高度

    int w=UiDevice.getInstance().getDisplayWidth();         //獲取屏幕寬度

    UiDevice.getInstance().swipe(w-10, h/2, 10, h/2, 30);   //從左往右進行滑動

}
//3.在點陣列中滑動(例子中為畫了一個不規則矩形)

public void testSwipe2(){

//227,318  746,335  784,814  221,840  矩形的四個定點,比如隨意畫手勢,滾動,滑動等都會用到這個

    Point p1=new Point();

    Point p2=new Point();

    Point p3=new Point();

    Point p4=new Point();

    p1.x=227;p1.y=318;

    p2.x=746;p1.y=335;

    p3.x=784;p1.y=814;

    p4.x=221;p1.y=840;

    Point[] pp={p1,p2,p3,p4};

    UiDevice.getInstance().swipe(pp, 50);

}
 
5.旋轉屏幕(模擬器上無法進行模擬,只能真機使用)
  • 旋轉方向:0度,90度,180度,270度
返回值 方法名 描述
void setOrientationLeft() 通過禁用傳感器,然后模擬設備向左旋轉並且固定位置
void setOrientationNatural() 通過禁用傳感器,然后模擬設備轉到其自然默認的方向,並且固定位置
void setOrientationRight() 通過禁用傳感器,然后模擬設備向又旋轉並且固定位置
void unfreezeRotation() 重新啟用傳感器和允許物理旋轉
boolean isNaturalOrientation() 檢測設置是否處於默認旋轉狀態
int getDisplayRotation() 返回當前的顯示旋轉,0度,90度,180度,270度值分別為:0,1,2,3
void freezeRotation() 禁用傳感器和凍結裝置物理旋轉在其當前旋轉狀態

 

 

  • 例如:
public void testOrientation() throws RemoteException{

    //1.模擬設備向左向右旋轉

    UiDevice.getInstance().setOrientationLeft();    //設備向左旋轉
    UiDevice.getInstance().setOrientationRight();   //設備向右旋轉

    //2.如果設備處於默認旋轉狀態,就向左旋轉

    if (UiDevice.getInstance().isNaturalOrientation()){ 

        UiDevice.getInstance().setOrientationLeft();

    }

    //3.變量a獲取當前新鮮事旋轉度數,然后進行相應if判斷

    int a=UiDevice.getInstance().getDisplayRotation();

    if (a==Surface.ROTATION_0){

        UiDevice.getInstance().setOrientationLeft();

    }

    if (a==Surface.ROTATION_90){

        UiDevice.getInstance().setOrientationLeft();

    }

    if (a==Surface.ROTATION_180){

        UiDevice.getInstance().setOrientationLeft();

    }

    if (a==Surface.ROTATION_270){

        UiDevice.getInstance().setOrientationLeft();

    }
}

6.滅屏與喚醒屏幕

返回值

方法名

描述

void wakeUp() 模擬按電源鍵,如果屏幕是喚醒的沒有任何作用
void sleep() 模擬按電源鍵,如果屏幕已經是關閉的則沒有任何作用
boolean isScreenOn() 檢查屏幕是否亮屏

 

  • 例如:
public void testScreenOn() throws RemoteException{

    //如果屏幕是亮屏,則關閉屏幕

    if (UiDevice.getInstance().isScreenOn()){

        UiDevice.getInstance().sleep();     //滅屏操作

    }

    //如果屏幕是滅屏狀態則轉為亮屏狀態

    if (!UiDevice.getInstance().isScreenOn()){

        UiDevice.getInstance().wakeUp();    //亮屏操作

    }

}

7.截圖與等待空閑(需要導入java.io.File)

  • 圖片格式:PNG
  • 空閑狀態:窗口沒有動作的時候稱之為空閑狀態
  • 窗口更新事件:打開一個應用,打開的過程稱之為窗口更新事件

①截圖相關API:

返回值

方法名

描述

boolean takeScreenshot(FilestorePath) 把當前窗口截圖並將其存儲為png默認的1.0f的規格(原尺寸)和90%質量,參數為file類的文件路徑
boolean takeScreenshot(File storePath,float scale,int quality) 把當前窗口截圖為png格式圖片,可以自定義縮放比例與原圖質量

 

 

  • 參數說明:

storePath:存放路徑,必需為png格式

Scale:縮放比例,1.0為原圖

Quality:圖片壓縮質量,范圍為0-100
  • 例如:
//把當前窗口截圖並將其存儲為png默認的1.0f的規格(原尺寸)和90%質量,參數為file類的文件路徑為"sdcard/test1.png"

public void testScreen(){

    UiDevice.getInstance().takeScreenshot(new File("sdcard/test1.png"));

}

 

 

②等待空閑相關API

 

返回值

方法名

描述

void waitForIdle(long timeuot) 自定義超時等待當前應用處於空閑狀態
void waitForIdle() 等待當前應用處於空閑狀態,默認等待10s
boolean waitForWindowUpdate(Steing packageName,long timeout) 等待窗口內容更新時間的發生窗口更新事件:打開一個應用

 

  • 例如:
public void testIdle(){

    //[0,417][64,480]這個是瀏覽器坐標

    UiDevice.getInstance().click(32, (480-417)/2+417);//點擊瀏覽器

    UiDevice.getInstance().waitForIdle(20000);//超時等待20s
}

8.獲取包名&開啟通知欄&快速設置&獲取布局文件

 

返回值 方法名 描述
void getCurrentPackageName() 獲取當前界面的包名
void dumpWindowHierarchy(String fileName) 獲取當前界面的布局文件,保存在/data.local/tmp/目錄下
boolean openNotification() 打開通知欄
boolean openQuickSettings() 打開快速設置

 

  • 例如:
//1.獲取並輸出包名

public void testGet(){

    String packageName=UiDevice.getInstance().getCurrentPackageName();  //獲取包名

    System.out.print("瀏覽器的包名為:"+packageName);   //在控制台輸出包名

    UiDevice.getInstance().openNotification();  //打開通知欄

    UiDevice.getInstance().openQuickSettings(); //打開快速設置欄

    UiDevice.getInstance().dumpWindowHierarchy("n.xml");//獲取當前界面的布局文件並命名為n

        //對於該文件可以使用命令"adb pull /data/local/tmp/n.xml F:\"命令將該文件導出來

}

9.實例演示(示例中的內容都為本文內容)

//步驟亮屏--解鎖--單擊瀏覽器--輸入"www.baidu.com"--按回車鍵--旋轉屏幕--截圖

public void testDemo() throws RemoteException{
    //檢查屏幕是否亮屏狀態,如果否則進行亮屏、解鎖操作      
    if (!UiDevice.getInstance().isScreenOn()){
        UiDevice.getInstance().wakeUp();
        sleep(2000);
        //161,352 解鎖按鈕坐標250,352為滑動到的位置
        UiDevice.getInstance().swipe(161, 352, 161+100, 352, 30);
        sleep(2000);
    }
    //如果是亮屏狀態,則跳過亮屏、解鎖操作進行后續操作

    //先點一下Home鍵確保屏幕在主界面上
    UiDevice.getInstance().pressHome();
    sleep(2000);
    //[0,417][64,480]瀏覽器的坐標
    UiDevice.getInstance().click(64/2,(480-417)/2+417);
    sleep(2000);
    //68,49為瀏覽器輸入網址窗口中的一個點
    UiDevice.getInstance().click(68, 49);
    sleep(2000);
    //刪除原先的默認網址
    UiDevice.getInstance().pressDelete();
    sleep(2000);
    //輸入網址"www.baidu.com"
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_PERIOD);//點為"PERIOD"
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_B);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_I);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_D);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_U);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_PERIOD);//點為"PERIOD"
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_C);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_O);
    sleep(1000);
    UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_M);
    sleep(1000);
    //然后點擊回車鍵
    UiDevice.getInstance().pressEnter();
    sleep(5000);
    //檢測屏幕是否處於旋轉狀態,如果不是,就讓屏幕向左旋轉90度
    if(!UiDevice.getInstance().isNaturalOrientation()){
        UiDevice.getInstance().setOrientationLeft();
        sleep(2000);
        UiDevice.getInstance().takeScreenshot(new File("sdcard/screen1.png"));
    }
    //如果屏幕是處於旋轉狀態
    int a=UiDevice.getInstance().getDisplayRotation();
    System.out.print("當前屏幕旋轉狀態為:"+a);
    UiDevice.getInstance().takeScreenshot(new File("sdcard/screen2.png"));

}


免責聲明!

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



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