【问题标题】:How to start Instrumentation project programmatically using Android Intent?如何使用 Android Intent 以编程方式启动 Instrumentation 项目?
【发布时间】:2013-01-15 13:50:50
【问题描述】:

开始测试用例的一种方法是,

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

我想用 Android 代码开始这个(有意图)

例如,

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

我们可以通过以下方法使用 Android Intent 运行:-

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

但是,如何运行

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

Android 意图?

提前感谢您的帮助:-)

【问题讨论】:

  • 您想从同一应用程序中的不同活动还是从另一个应用程序运行仪器测试?
  • 从不同的项目活动(第一个项目),我想开始测试项目“com.google.vishal.test”(第二个测试项目),它可以自动化一些活动(第三个项目)。
  • 查看 here 是否有类似问题。

标签: android android-intent android-activity robotium instrumentation


【解决方案1】:

adb shell 启动 instrumentation 的命令:-

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

Android Activity 启动 instrumentation 的 Android 代码:-

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

注意:

其他方法,

用于启动检测的 Android 代码(Android 2.3 到 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);

对于 Android 4.2,它需要权限“android.permission.INJECT_EVENTS”& 只有系统应用程序才允许。由于某些安全原因,用户应用程序无法使用此权限。

所以你不能使用 Runtime.getRuntime().exec(str_cmd);适用于 Android 4.2 及更高版本...

所以现在的工作方法是:

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

从您的活动中执行此命令。

谢谢。

【讨论】:

  • 你好@juned:你可以使用这个链接stackoverflow.com/questions/15464111/…从主机运行“adb push/pull”,但是你不能从android代码运行“adb push/pull”,因为adb是主机端 android sdk 工具。希望这能帮助您解决问题...
  • 感谢您的回复,有没有其他使用USB传输文件的解决方案?
  • @juned:请看这个视频“MTP over USB”:youtube.com/watch?v=84O8KlPxEyU
  • 刚刚看过那个视频,但是如何以编程方式做到这一点?
  • 我无法使用 java 运行 pull 命令...尝试 Runtime.exec 但实际上什么也没发生。当我在终端中尝试相同的命令时,它可以工作
【解决方案2】:

这实际上是不可能的,原因是你需要通过 ADB 来运行 Instrumentation,由于安全原因,adb 具有一定的特权,因此不能在手机上运行(与任何开源软件一样,这当然是可能的,但你必须重写一些 android,然后它只能在你安装了它的手机上工作!)。

请问您这样做的原因是什么?如果你真的需要跨应用程序自动化,你更好的选择可能是我们新的 android ui 测试框架,或者只在模拟器上测试并使用在视图层次结构之上运行的东西,因为尝试你目前的状态是死胡同.

【讨论】:

  • 我想一个接一个地启动不同的测试项目,所以不能每次都从桌面命令提示符启动。所以我需要一些仅由android代码执行的方法。感谢您的出色帮助@“Paul Harris”,我找到了一种跑步方式,并写下我的答案。
  • @PaulHarris 你是什么意思这是不可能的?查看Android的Context类中的startInstrumentation()方法:developer.android.com/reference/android/content/…, java.lang.String, android.os.Bundle)
  • 这对我想使用 UiAutomator 启动一些应用程序并自动交互为我做一些事情很有用,这让我从一些愚蠢的工作中解脱出来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多