Android Instrumentation HOME按钮

时间:2014-08-07 13:42:25

标签: android robotium instrumentation android-testing android-instrumentation

任何想法为什么将HOME键发送到在Instrumentation下运行的应用程序什么都不做?

import android.app.Instrumentation;
import android.view.KeyEvent;

public class MyInstrumentation extends Instrumentation {

  public void sendKeys() {
    // Works reliably
    this.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

    // Does nothing, nothing is printed to logcat
    this.sendKeyDownUpSync(KeyEvent.KEYCODE_HOME);
  }
}

使用Robotium时以及直接使用Instrumentation时也是如此。模拟器和非root设备上的行为相同。

2 个答案:

答案 0 :(得分:10)

主页按钮在仪器中不起作用,即使这样做也会使您处于不太有利的位置。 Android Instrumentation只能检测自己的进程,这意味着一旦发送它就无法返回到您的应用程序,并且可能更糟糕的是稍微不确定,因为如果感觉如此,Android将能够关闭您的进程这将导致你的测试结束。

虽然这对你没有多大用处?我怀疑你正试图测试与活动生命周期有关的事情here。这可以通过仪器进行测试,但不能以您希望的方式进行测试。如果您查看检测类(here)的API文档,您将看到callActivityXXX(活动活动)形式的许多有用方法,其中XXX与您要执行的生命周期事件匹配。

使用这些方法比我怀疑你喜欢的家庭重新启动更难,但它允许你将测试分解到较低的水平,以确保你的应用程序在每个阶段都做正确的事情随着时间的推移,它会越来越强大(比如测试它将状态保存在暂停状态并在onResume上再次正确加载)。

使用检测进行测试的下一个最简单方法取决于您是否使用模拟器,如果只是在模拟器上运行,您可以使用方向命令:

solo.setActivityOrientation(Solo.LANDSCAPE);
solo.setActivityOrientation(Solo.PORTRAINT);

这将导致您的活动被销毁并恢复测试活动生命周期中的一些但不是所有状态。

答案 1 :(得分:2)

我不相信HOME键可以模拟或以编程方式执行。据我所知,这纯粹是一个特定于框架的事件,应用程序并不知情。我知道你是否要覆盖onKeyDown(),你永远不会意识到KeyEvent.KEYCODE_HOME

我相信您可以使用CATEGORY_HOME类别启动Intent,但我还没试过。

或者,如果您尝试测试活动生命周期之类的东西,也许您可​​以模拟配置更改;如方向改变。或者,如果您只关心停止活动,也许您可​​以致电this.finish(),其中this是活动。