InstrumentationRegistry 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参数 |
UiDevices新增API
返回类型 | API | 解释 |
---|
void | dumpWindowHierarchy(OutputStream out) | 获取当前页面层级到输出流(OutputStream) |
java.lang.String | executeShellCommand() | 执行shell命令使用shell用户身份,并返回字符串的标准输出 |
UiObject2 | findObject(BySelector selector) | 返回符合选择条件的第一个对象 |
UiObject | findObject(UiSelector selector) | 返回符合选择条件的UiObject |
List<UiObject2> | findObjects(BySelector selector) | 返回所有符合选择条件的对象 |
<R> R | wait(SearchCondition<R> condition, long timeout) | 等待的条件得到满足 |
示例代码如下:
package mqqzt.myuitest3
import android.app.Instrumentation
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.content.pm.ResolveInfo
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.After
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
@RunWith(AndroidJUnit4.class)
public class UiDeviceTest {
UiDevice uiDevice
Instrumentation instrumentation
@Before
public void setUp(){
uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
instrumentation = InstrumentationRegistry.getInstrumentation()
uiDevice.pressBack()
uiDevice.pressBack()
uiDevice.pressBack()
uiDevice.pressBack()
}
@After
public void tearDown(){
uiDevice.pressBack()
uiDevice.pressBack()
uiDevice.pressBack()
uiDevice.pressBack()
}
@Test
public void testInstrumentation(){
//获取运行Intrumentation命令时,传入的参数
Bundle bundle = InstrumentationRegistry.getArguments()
//把获取到的参数发送到测试结果中
instrumentation.sendStatus(888, bundle)
Context curContext = InstrumentationRegistry.getContext()
Context tarContext = InstrumentationRegistry.getTargetContext()
PackageManager pm = curContext.getPackageManager()
Bundle contextBundle = new Bundle()
contextBundle.putString("CUR_CONTEXT", pm.getInstalledPackages(PackageManager.GET_ACTIVITIES).get(0).packageName)
InstrumentationRegistry.registerInstance(instrumentation, contextBundle)
Bundle b2 = InstrumentationRegistry.getArguments()
instrumentation.sendStatus(889, b2)
}
@Test
public void testUiDeviceNewAPI() throws IOException, UiObjectNotFoundException {
File file = new File(Environment.getExternalStorageDirectory() + File.separator + "uidump.xml")
if(file.exists()){
file.delete()
try {
file.createNewFile()
} catch (IOException e) {
e.printStackTrace()
}
}else {
try {
file.createNewFile()
} catch (IOException e) {
e.printStackTrace()
}
}
OutputStream os = new FileOutputStream(file)
uiDevice.dumpWindowHierarchy(os)
uiDevice.executeShellCommand("am start -n com.android.settings/.Settings")
uiDevice.wait(Until.findObject(By.text("Display")), 20000)
UiObject2 uiObject2 = uiDevice.findObject(By.text("Display"))
uiObject2.click()
UiObject uiObject = uiDevice.findObject(new UiSelector().text("Wallpaper"))
uiObject.clickAndWaitForNewWindow()
Bundle bundle = new Bundle()
List<UiObject2> list = uiDevice.findObjects(By.clazz(TextView.class))
for(UiObject2 uiObject21: list){
bundle.putString("UIDEVICE", uiObject21.getText())
}
InstrumentationRegistry.registerInstance(instrumentation, bundle)
instrumentation.sendStatus(111, bundle)
}
@Test
public void testLauncherAPP(){
Context context = InstrumentationRegistry.getContext()
PackageManager pm = context.getPackageManager()
List<ApplicationInfo> list = pm.getInstalledApplications(0)
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null)
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER)
List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(mainIntent, 0)
for(ResolveInfo resolveInfo : resolveInfoList){
String activityName = resolveInfo.activityInfo.name
String packageName = resolveInfo.activityInfo.packageName
Intent launcherIntent = new Intent()
launcherIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
launcherIntent.setComponent(new ComponentName(packageName, activityName))
context.startActivity(launcherIntent)
try {
Thread.sleep(2000)
} catch (InterruptedException e) {
e.printStackTrace()
}
uiDevice.pressBack()
uiDevice.pressBack()
uiDevice.pressBack()
uiDevice.pressBack()
}
}
}