Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 意式浓缩咖啡onView性能不一致_Android_Junit4_Android Testing_Android Espresso - Fatal编程技术网

Android 意式浓缩咖啡onView性能不一致

Android 意式浓缩咖啡onView性能不一致,android,junit4,android-testing,android-espresso,Android,Junit4,Android Testing,Android Espresso,我正在使用Junit4和浓缩咖啡进行测试。我在浓缩咖啡测试中遇到了一个奇怪的问题——当我调用onView时,有时一切都按预期执行,但有时我的测试会冻结,60秒后我会得到类似的结果“android.support.test.espresso.AppNotIdleException:在60秒内循环63次。以下空闲条件失败异步\u任务\u已\u空闲” 例如: onView(withId(R.id.zone_button_continue)).perform(click()); onVi

我正在使用Junit4和浓缩咖啡进行测试。我在浓缩咖啡测试中遇到了一个奇怪的问题——当我调用onView时,有时一切都按预期执行,但有时我的测试会冻结,60秒后我会得到类似的结果“android.support.test.espresso.AppNotIdleException:在60秒内循环63次。以下空闲条件失败异步\u任务\u已\u空闲” 例如:

    onView(withId(R.id.zone_button_continue)).perform(click());
    onView(withId(R.id.loginButton)).check(matches(isDisplayed()));
    onView(withId(R.id.number)).check(matches(isDisplayed()));
    onView(withId(R.id.password)).check(matches(isDisplayed()));
    onView(withId(R.id.number)).perform(typeText(phoneNumber));
    onView(withId(R.id.password)).perform(typeText(password));
    onView(withId(R.id.loginButton)).perform(click());
除了最后一行之外,所有的操作都得到了正确的执行——出于某种原因,它找不到登录按钮,但它100%都在那里。我能做到

activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            activity.findViewById(R.id.loginButton).performClick();
             }
    });
在我的大部分活动中,我都有类似的问题——有时onView起作用,有时不起作用

是什么导致了这种不一致性?我已经为这个问题争论了一段时间,这使得我的测试非常令人沮丧和困难。到目前为止,我的结论是,我的gradle依赖性有问题,或者我的应用程序中存在某种缺陷,阻止意式浓缩咖啡正常工作。但奇怪的是,在exa中最重要的是,除了最后一行,所有的东西都在一个活动中发生,这让我怀疑这个bug是否在我的应用程序中。 以下是我的gradle依赖项:

compile files('src/main/libs/guice-3.0-no_aop.jar')
compile files('src/main/libs/javax.inject-1.jar')
compile files('src/main/libs/roboguice-2.0.jar')
compile files('src/main/libs/junit-4.11.jar')
compile files('src/main/libs/hamcrest-core-1.3.jar')
compile files('src/main/libs/GeoLib.jar')
compile files('src/main/libs/GeoPolygons.jar')
compile files('src/main/libs/universal-image-loader-1.9.4.jar')
compile files('src/main/libs/javax.annotation-3.2-b06-sources.jar')
compile ('uk.co.chrisjenx:calligraphy:2.1.0'){
    exclude group:'com.android.support'
}
compile 'com.squareup:otto:1.3.5'
compile ('com.google.android.gms:play-services:6.5.87'){
    exclude group:'com.android.support'
}
compile 'com.android.support:support-annotations:22.2.1'
compile ('com.android.support:appcompat-v7:22.2.0'){
    exclude group:'com.android.support'
}
compile ('com.android.support:support-v4:22.2.0'){
    exclude group:'com.android.support', module:'support-annotations'
}
compile ('com.android.support:palette-v7:22.2.0'){
    exclude group:'com.android.support'
}
compile 'com.google.code.findbugs:jsr305:2.0.1'

compile 'com.nineoldandroids:library:2.4.0'
compile 'pl.charmas.android:android-reactive-location:0.4@aar'
compile 'io.reactivex:rxjava:1.0.3'
compile files('src/main/libs/FlurryAnalytics-6.1.0.jar')
compile 'com.github.castorflex.smoothprogressbar:library:1.1.0'
//    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile('com.android.support.test:runner:0.4.1') {
    exclude group: 'com.android.support', module: 'support-annotations'
}
// Set this dependency to use JUnit 4 rules
androidTestCompile('com.android.support.test:rules:0.4.1') {
    exclude group: 'com.android.support', module: 'support-annotations'
}
// Set this dependency to build and run Espresso tests
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.1') {
    exclude group: 'com.android.support', module: 'support-annotations'
}

androidTestCompile('com.android.support.test.espresso:espresso-intents:2.2.1') {
    exclude group: 'com.android.support', module: 'support-annotations'
}
androidTestCompile('com.android.support.test.espresso:espresso-web:2.2.1') {
    // PackagingOptions modified to make this work
    exclude group: 'com.android.support', module: 'support-annotations'
}
testCompile 'junit:junit:4.11'
testCompile ('org.mockito:mockito-core:1.9.5'){
    exclude group: 'org.hamcrest'
}
compile 'org.mod4j.org.apache.commons:lang:2.1.0'

请帮我解决这个问题,我完全没有主意了,并且被它困住了。

最简单的方法是查看为什么会出现一个带有消息“以下空闲条件失败异步\u任务\u已\u空闲”的
AppNotIdleException

  • 在Android Studio中以调试模式运行测试
  • 等到测试挂起
  • 在(默认)60秒过去之前,暂停测试
  • 查看“线程”列表,查看名为“AsyncTask#1”的线程,依此类推。展开处于运行状态的线程。在这里,您可以看到代码的哪些部分使应用程序保持忙碌
这是我的案例的结果,因此我不得不在测试中禁用Facebook SDK,以使它们再次稳定:


也有同样的问题,facebook库也有一个bug。
切换到不同的模拟设备,一切正常!

如果你的应用程序冻结,那么它的某些部分是否有可能处于无限循环中?你可以在调试模式下运行测试,并查看它挂起的位置挂起在最后一行“onView”(带id(R.id.login_按钮))。执行(单击());“,这一行执行后将不执行任何内容,并在60秒后完成测试:“android.support.test.espresso.AppNotIdleException:在60秒内循环63次。以下空闲条件失败异步\u任务\u已\u空闲“谢谢你,先生。这个帮助了我。抛出异常还有其他原因吗?因为在我的例子中,所有异步任务都处于
WAIT
状态,但我仍然得到异常。@EmilS。对不起,我不知道,因为这是我处理的关于这个错误的唯一案例。非常感谢!这有助于我停止浪费时间。你能告诉我是哪种模拟器设备让事情适合你吗?我指的是API级别和设备类型。谢谢。当然,这里有完整的规格:Nexus5API27安卓8.1(谷歌游戏)ABI:x86