UIDevice提供了4个方法(其中有1个方法废弃),用来获取设备和Package名称。分别是
(1)public String getCurrentActivityName ()
用于获取当前Activity的Name,但官方文档中,注明该方法可信度不高,且被弃用。所以无需考虑。
(2)public String getCurrentPackageName ()
获取当前APP Package的Name,而非当前Activity所在Package的Name。
(3)public String getLauncherPackageName ()
获取启动器(Launcher)所在Package的Name,并非测试APP启动Activity所在Package的Name。
(4)public String getProductName ()
获取设备名称。
我们还是用一个简单的Demo来演示以上方法的使用。
测试需求如下:
在不同的Activity中获取设备名称和Package名称。
两个Activity分别位于:com.breakloop.test和com.breakloop.test2
两个Activity名称分别为:MainActivity和Main2Activity
测试案例代码:
@Test
public void NameTestCase1(){
String packageName="com.breakloop.test";
String activityName=".MainActivity";
String value;
//(1)start APP
Log.i(TAG, "TestCase1: open APP");
Utils.startAPP(mDevice,packageName,activityName);
//(2)wait 1s
mDevice.waitForWindowUpdate(packageName,1000);
Log.i(TAG, "TestCase1: wait for 1s");
//(3)Get Infos
Log.i(TAG, "TestCase1: Get Package Name = "+mDevice.getProductName() + " in MainActivity");
Log.i(TAG, "TestCase1: Get Current Package Name = "+mDevice.getCurrentPackageName() + " in MainActivity");
Log.i(TAG, "TestCase1: Get Launcher Package Name = "+mDevice.getLauncherPackageName() + " in MainActivity");
//(3)Jump to another Activity and get Infos again
UiObject2 button=mDevice.findObject(By.res("com.breakloop.test:id/btn_goto2"));
if(button==null){
Log.i(TAG, "TestCase1: Do not find Button");
}else {
if(button.isEnabled()){
button.click();
mDevice.waitForWindowUpdate(packageName,1000);
Log.i(TAG, "TestCase1: Get Package Name = "+mDevice.getProductName() + " in Main2Activity");
Log.i(TAG, "TestCase1: Get Current Package Name = "+mDevice.getCurrentPackageName() + " in Main2Activity");
Log.i(TAG, "TestCase1: Get Launcher Package Name = "+mDevice.getLauncherPackageName() + " in Main2Activity");
}
}
Utils.closeAPP(mDevice,packageName);
}
测试结果如下:
可见,
(a)在不同activity下获取的信息完全相同。
(b)Activity Name确实不可信。