Uiautomator 2.0 - UiObject2


1. InstrumentationRegistry類

1.1. 類說明:

一個暴露的注冊實例,持有instrumentation運行的進程和參數,還提供了一種簡便的方法調用instrumentation, application context和instrumentation參數。

1.2 相關API

 

返回類型 API
static Bundle getArguments(): 返回一個instrumentation參數副本
static Context getContext():  返回instrumentation對應包的Context
static Instrumentation getInstrumentation(): 返回當前運行的instrumentation
static Context getTargetContext(): 返回一個目標應用程序的Context
static void registerInstance(Instrumentation instrumentation, Bundle arguments):記錄或暴露當前instrumentation運行和instrumentation參數包的副本,存儲在注冊中心

1.3 簡單示例

 

1.3.1 

 

package com.test.auto.hellouiautomator;  
  
import android.app.Instrumentation;  
import android.content.Context;  
import android.content.Intent;  
import android.net.Uri;  
import android.os.Bundle;  
import android.support.test.InstrumentationRegistry;  
import android.support.test.runner.AndroidJUnit4;  
import android.support.test.uiautomator.UiDevice;  
  
import org.junit.Before;  
import org.junit.Test;  
import org.junit.runner.RunWith;  
  
import java.io.IOException;  
  
/** 
 * Created by auto on 16/3/3. 
 */  
  
@RunWith(AndroidJUnit4.class)  
public class TestClass01 {  
    public UiDevice mDevice;  
    public Instrumentation instrumentation;  
  
    @Before  
    public void setUp(){  
        instrumentation = InstrumentationRegistry.getInstrumentation();  
        mDevice = UiDevice.getInstance(instrumentation);  
    }  
  
    @Test  
    public void testCase01() throws IOException {  
        //獲取運行時的參數  
        Bundle args = InstrumentationRegistry.getArguments();  
        //輸出到運行報告中  
        instrumentation.sendStatus(100, args);  
  
        //獲取測試包的Context  
        Context testContext = InstrumentationRegistry.getContext();  
        //獲取被測應用的Context  
        Context testedContext = InstrumentationRegistry.getTargetContext();  
  
        //通過Context來啟動一個Activity,e.g.瀏覽器  
        String url = "https://www.baidu.com";  
        Intent i1 = new Intent(Intent.ACTION_VIEW);  
        i1.setData(Uri.parse(url));  
        i1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
        testContext.startActivity(i1);  
          
        //通過目標Context來啟動撥號功能  
        Intent i2 = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + 10086));  
        i2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
        testedContext.startActivity(i2);  
          
        Bundle inputBundle = new Bundle();  
        inputBundle.putString("key", "value");  
        //注入一個Bundle  
        InstrumentationRegistry.registerInstance(instrumentation, inputBundle);  
        //獲取運行參數  
        Bundle outBundle = InstrumentationRegistry.getArguments();  
        //輸出到結果報告中  
        instrumentation.sendStatus(110,outBundle);  
  
  
    }  
  
}  

  

 

1.3.2 運行結果
am instrument -w -r -e test 123 com.test.auto.hellouiautomator

 

 

2. UiDevice新增API

2.1 API 介紹

 

返回類型 API
void dumpWindowHierarchy(OutPutStream out): 獲取當前頁面層級到輸出流
String executeShellCommand(String cmd): 執行一個shell命令。備注:此方法只支持api21以上,手機需要5.0系統以上
UiObject2 findObject(BySelector selector): 返回第一個匹配條件的對象
UiObject findObject(UiSelector selector): 返回一個匹配條件的代表視圖的UiObject對象
List<UiObject2> findObjects(BySelector selector): 返回所有匹配條件的對象
<R> R wait(SearchCondition<R> condition, long timeout): 等待的條件得到滿足

2.2 代碼示例

 

package com.test.auto.hellouiautomator;  
  
import android.app.Instrumentation;  
import android.os.Bundle;  
import android.os.Environment;  
import android.support.test.InstrumentationRegistry;  
import android.support.test.runner.AndroidJUnit4;  
import android.support.test.uiautomator.By;  
import android.support.test.uiautomator.UiDevice;  
import android.support.test.uiautomator.UiObject;  
import android.support.test.uiautomator.UiObject2;  
import android.support.test.uiautomator.UiObjectNotFoundException;  
import android.support.test.uiautomator.UiSelector;  
import android.support.test.uiautomator.Until;  
import android.widget.TextView;  
  
import org.junit.Before;  
import org.junit.Test;  
import org.junit.runner.RunWith;  
  
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.OutputStream;  
import java.util.List;  
  
/** 
 * Created by auto on 16/3/3. 
 */  
  
@RunWith(AndroidJUnit4.class)  
public class TestClass01 {  
    public UiDevice mDevice;  
    public Instrumentation instrumentation;  
  
    @Before  
    public void setUp(){  
        instrumentation = InstrumentationRegistry.getInstrumentation();  
        mDevice = UiDevice.getInstance(instrumentation);  
    }  
  
    @Test  
    public void testCase01() throws IOException, UiObjectNotFoundException {  
  
        //dumpWindowHierarchy(OutPutStream out)  
        File file = new File(Environment.getExternalStorageDirectory()+File.separator+"dump.xml");  
        if(file.exists()){  
            file.delete();  
        }  
        file.createNewFile();  
        OutputStream outputStream = new FileOutputStream(file);  
        mDevice.dumpWindowHierarchy(outputStream);  
  
        //executeShellCommand(String cmd)  
        mDevice.executeShellCommand("am start -n com.tencent.mobileqq/.activity.SplashActivity ");  
  
        //findObject(BySelector selector)  
        mDevice.wait(Until.findObject(By.text("聯系人")),2000);  
        UiObject2 uiObject2 = mDevice.findObject(By.text("聯系人"));  
        uiObject2.click();  
  
        //findObject(UiSelector selector)  
        UiObject uiObject = mDevice.findObject(new UiSelector().text("短信"));  
        uiObject.click();  
  
        //findObjects(BySelector selector)  
        List <UiObject2> uiObject21 = mDevice.findObjects(By.clazz(TextView.class));  
        Bundle bundle = new Bundle();  
        for (UiObject2 a:uiObject21) {  
            bundle.putString("TextView", a.getText());  
        }  
        instrumentation.sendStatus(123,bundle);  
  
  
    }  
  
}  

  

  2  UiAutomator2 - UiObject2 

 

   
 
3 UiObject2 API
 
     
返回 API [ 基礎動作 ] 說明
void clear() 清除編輯框里的內容
void click() 點擊一個對象
<R> R clickAndWait(EventCondition<R> condition, long timeout) 點擊一個對象然后等待在超時時間內條件成立則通過,否則拋出異常
void drag(Point dest) 拖拽這個對象到指定位置
void drag(Point dest, int speed) 自定義速度拖拽這個對象到指定位置,速度:像素數/秒
void longClick() 執行一個長時間點擊這個對象動作
boolean scroll(Direction direction, float percent) 對該對象執行一個滾動動作
boolean scroll(Direction direction, float percent, int speed) 自定義滾動速度對該對象執行一個滾動動作
void legacySetText(java.lang.String text) 設置文本內容通過發送keycode
void setText(java.lang.String text) 設置文本內容如果這個對象是一個可編輯的字段
     
返回 API [ 手勢 ] 說明
void pinchClose(float percent) 對該對象執行關閉手勢
void pinchClose(float percent, int speed) 自定義速度對該對象執行關閉手勢
void pinchOpen(float percent) 對該對象執行打開手勢
void pinchOpen(float percent, int speed) 自定義速度對該對象執行打開手勢
boolean fling(Direction direction) 對該對象執行一個滑動的手勢,Direction代表從哪個方向作為起點
boolean fling(Direction direction, int speed) 自定義速度對對象執行一個滑動的手勢
void swipe(Direction direction, float percent) 執行一個滑動手勢
void swipe(Direction direction, float percent, int speed) 執行一個滑動手勢,可定義滑動速度
void setGestureMargin(int margin) 以像素為單位設置邊緣用於手勢
void setGestureMargins(int left, int top, int right, int bottom) 以像素為單位設置邊緣用於手勢
     
返回 API [ 獲取屬性 ] 說明
String  getApplicationPackage() 返回應用程序的包名稱
String getClassName() 返回對象的類名稱
String getContentDescription() 返回該對象的內容描述
String getResourceName() 返回這個對象的完全限定的資源名的id
String getText() 返回此對象的文本值
Rect getVisibleBounds() 返回該對象的可見范圍在屏幕坐標
Point getVisibleCenter() 返回一個指向這個對象的可見范圍的中心
     
返回 API [ 屬性判斷 ] 說明
boolean isCheckable() 返回此對象是否具有checkable屬性
boolean isChecked() 返回此對象是否具有checked屬性
boolean isClickable() 返回此對象是否具有clickable屬性
boolean isEnabled() 返回此對象是否具有enabled屬性
boolean isFocusable() 返回此對象是否具有focusable屬性
boolean isFocused() 返回此對象是否具有focused屬性
boolean isLongClickable() 返回此對象是否具有longclickable屬性
boolean isScrollable() 返回此對象是否具有scrollable屬性
boolean isSelected() 返回此對象是否具有selected屬性
     
返回 API [ 獲取子元素 ] 說明
UiObject2 findObject(BySelector selector) 搜索所有的元素在這個對象層級之下,並返回第一個對象與搜索條件相匹配
List<UiObject2> findObjects(BySelector selector) 搜索所有的元素在這個對象層級之下,並返回所有對象與搜索條件相匹配
List<UiObject2> getChildren() 返回這個對象下的直接子元素的集合
UiObject2 getParent() 返回該對象的父類
int getChildCount() 返回這個對象直屬子元素的數量
boolean equals(java.lang.Object object) 比較兩個對象是否相等
int hashCode() 獲取對象的hashCode
boolean hasObject(BySelector selector) 返回該對象是否存在
void recycle() 回收這個對象
<R> R wait(SearchCondition<R> condition, long timeout) 等待的條件得到滿足
<R> R wait(UiObject2Condition<R> condition, long timeout) 等待的條件得到滿足
     


免責聲明!

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



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