误报:junit.framework.AssertionFailedError:找不到EditText

时间:2014-03-29 22:02:28

标签: android android-emulator robotium travis-ci

我在设置Robotium测试时遇到问题,在没有随机错误的情况下运行Travis。

我得到的每一对构建

pl.mg6.agrtt.TestActivityTests > testCanEnterTextAndPressButton[test(AVD) - 4.4.2] FAILED
    junit.framework.AssertionFailedError: EditText is not found!
    at com.robotium.solo.Waiter.waitForAndGetView(Waiter.java:540)

我所有的测试。

我创建了a simple project on GitHub来表明问题 您可能会看到它如何构建on Travis。注意构建#7在使用不相关的文件后失败。

我怀疑这是由于模拟器被锁定或其暗淡变暗造成的。我可以通过关闭连接设备的屏幕然后运行

来在本地计算机上重现此问题
./gradlew connectedAndroidTest

在进行了测试之后,我得到了一条不同的错误信息,这个信息稍微提供了一些信息,因此我会添加它以防万一有人试图找到解决方案:

pl.mg6.agrtt.TestActivityTests > testCanFindViewsEnterTextAndPressButton[test(AVD) - 4.4.2] FAILED
    junit.framework.AssertionFailedError: Click at (160.0, 264.0) can not be completed! (java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission)
    at com.robotium.solo.Clicker.clickOnScreen(Clicker.java:106)

3 个答案:

答案 0 :(得分:7)

虽然我仍然不知道这个问题的根本原因,经过一些调查并在Robotium的作者Renas Reda的帮助下,我可以确认我最初怀疑仿真器确实锁定了自己。

我现在使用的解决方法是将此代码放入setUp方法:

getInstrumentation().runOnMainSync(new Runnable() {
    @Override
    public void run() {
        getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    }
});

答案 1 :(得分:3)

Robotium在使用enterText(int, String)时会丢弃不可见的视图。而是使用getView(int)的{​​{1}}来使用Solo中的结果视图。

像这样:

enterText(View, String)

如果设备屏幕被锁定,Robotium无法运行您提供的指令。您可能想要禁用屏幕锁定。

通过上面的代码,我的测试通过了。

答案 2 :(得分:1)

你的猜测可能是正确的。确保它的一种方法是捕获抛出的异常并调用

solo.takeScreenshot("screenshotFileName");

然后查看保存在手机SD卡中的屏幕截图,了解手机在发生错误时的操作。

我通过打开设备"保持清醒"解决了这个问题。设置让它在充电时不会睡觉。