False positives: junit.framework.AssertionFailedError: EditText is not found

时光总嘲笑我的痴心妄想 提交于 2019-12-13 14:24:18

问题


I have a problem setting up Robotium tests to run on Travis without random false posivities.

Every couple of builds I get

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)

on all my tests.

I have created a simple project on GitHub to show the issue.
You may see how it builds on Travis. Note build #7 failed after modyfing unrelated file.

I'm suspecting this to be caused by emulator being locked or its sceeen dimmed. I could reproduce this issue on local machine by turning connected device's screen off and then running

./gradlew connectedAndroidTest

After modyfing tests I got a different error message, which is somewhat more informative, so I'm adding it just in case someone tries to find a solution:

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)

回答1:


While the root cause of this problem is still unknown to me, after some investigation and with a help from Robotium's author Renas Reda I could confirm what I initially suspected that emulator indeed locks itself.

A workaround I'm using now is this code put in setUp method:

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



回答2:


Robotium discards invisible views when using enterText(int, String). Instead use getView(int) of Solo to use resulting view in enterText(View, String).

Like this:

public void testCanEnterTextAndPressButton() {
    solo.enterText(((EditText) solo.getView(R.id.editText1)), "my login");
    solo.enterText(((EditText) solo.getView(R.id.editText2)), "my password");
    solo.clickOnView(solo.getView(R.id.button));
}

And if the device screen is locked Robotium fails to run those instructions you gave. You might want to disable screen locking.

By code above my tests pass.




回答3:


Your guess is probably right. One way to be sure that it is is to catch the exception that is thrown and call

solo.takeScreenshot("screenshotFileName");

and then take a look at the screenshot that is saved to your phone's SD card to see what your phone was doing at the time of the error.

I solved this problem by turning on the device's "Stay Awake" setting so it won't sleep while recharging.



来源:https://stackoverflow.com/questions/22737476/false-positives-junit-framework-assertionfailederror-edittext-is-not-found

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