我在设置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)
答案 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卡中的屏幕截图,了解手机在发生错误时的操作。
我通过打开设备"保持清醒"解决了这个问题。设置让它在充电时不会睡觉。