How to start Instrumentation project programmatically using Android Intent?

纵饮孤独 提交于 2019-12-18 13:32:29

问题


one way to start testcase is,

adb shell am instrument 
  -w com.google.vishal.test/android.test.InstrumentationTestRunner 

i want to start this using Android code (with intent)

for example,

adb shell am start -n com.google.android.contacts/.ContactsActivity

we can run using Android intent by following method :-

Intent intent = new Intent(com.google.android.contacts, ContactsActivity.class);
startActivity(intent);

But, how to run

adb shell am instrument 
  -w com.google.vishal.test/android.test.InstrumentationTestRunner 

by Android intent ?

Thanks for your help in advance :-)


回答1:


Command to start instrumentation from adb shell :-

adb shell am instrument -w com.android.vishal.project.test/android.test.InstrumentationTestRunner   

Android Code to start instrumentation from Android Activity :-

 startInstrumentation(new ComponentName("com.android.vishal.project.test", "android.test.InstrumentationTestRunner"), null, null);

Note :

Other Method,

Android Code for start instrumentation (Android 2.3 to Android 4.1.2)

String str_cmd = "adb shell am instrument -w com.android.vishal.project.test/android.test.InstrumentationTestRunner";
Runtime.getRuntime().exec(str_cmd);

for Android 4.2 it requires permission "android.permission.INJECT_EVENTS" & which is only allowed by System application. User application can not use this permission because of some security reasons.

so you can not use Runtime.getRuntime().exec(str_cmd); for Android 4.2 onwards ...

so now working method is :

 startInstrumentation(new ComponentName("com.android.vishal.project.test", "android.test.InstrumentationTestRunner"), null, null);

execute this command from your Activity.

Thanks.




回答2:


This is actually not possible to do, the reason being is that to run instrumentation you need to it via ADB, adb has certain special privileges because of security and therefore can not be run on the phone (As with anything open source, it is of course possible but you would have to rewrite some android and then it would only work on phones you installed that on!).

May I ask your reason for doing this? If you really need to automate across applications your better choice might be to either us the new android ui test framework or to test only on the emulator and use something that runs on top of the view hierarchy because trying what you are currently is a dead end.



来源:https://stackoverflow.com/questions/14339216/how-to-start-instrumentation-project-programmatically-using-android-intent

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!