2015-01-21 17 views
20

Tôi đã thử sử dụng khung kiểm tra Espresso và đã viết một thử nghiệm đơn giản.Kiểm tra Espresso không thành công sau khi nhấp và chặn thành công trong 60 giây

Không có gì lạ mắt đó, chỉ cần mã này:

onView(withId(R.id.login_button_stub)).perform(click()); 

thử nghiệm chạy tốt trên thiết bị Nexus 5 và Genymotion với Android 5.0, nhưng không thành công trên Android Emulator 4.x, 5.0, 2.3 Genymotion, 4.x và LG G2 với Android 4.x.

Trên tất cả các thiết bị/trình giả lập/mô phỏng này, nút được nhấp và hành động của nó được thực hiện (chuyển sang màn hình khác trong trường hợp của tôi). Vấn đề là nó chặn trong perform trên một số thiết bị. Điều này kết thúc bằng ngoại lệ tốt đẹp sau 60 giây:

android.support.test.espresso.PerformException: Error performing 'single click' on view 'with id: com.vielengames.mock:id/login_button_stub'. 
    ... 
    Caused by: android.support.test.espresso.AppNotIdleException: Looped for 3544 iterations over 60 SECONDS. The following Idle Conditions failed . 
    ... 

Lưu ý rằng không có thông tin về những điều kiện không thành công. Nhìn vào mã nguồn Espresso, cần có danh sách các vấn đề được phân cách bằng dấu phẩy.

Đây là mã đầy đủ: TestCase.java.

và stacktrace đầy đủ:

I/TestRunner﹕ android.support.test.espresso.PerformException: Error performing 'single click' on view 'with id: com.vielengames.mock:id/login_button_stub'. 
     at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83) 
     at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:70) 
     at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:53) 
     at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:185) 
     at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115) 
     at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87) 
     at com.vielengames.ui.NotLoggedOnTestCase.testLoggedOnAfterLoginClick(NotLoggedOnTestCase.java:19) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) 
     at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) 
     at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192) 
     at junit.framework.TestCase.runBare(TestCase.java:134) 
     at junit.framework.TestResult$1.protect(TestResult.java:115) 
     at junit.framework.TestResult.runProtected(TestResult.java:133) 
     at android.support.test.internal.runner.junit3.DelegatingTestResult.runProtected(DelegatingTestResult.java:90) 
     at junit.framework.TestResult.run(TestResult.java:118) 
     at android.support.test.internal.runner.junit3.AndroidTestResult.run(AndroidTestResult.java:49) 
     at junit.framework.TestCase.run(TestCase.java:124) 
     at android.support.test.internal.runner.junit3.NonLeakyTestSuite$NonLeakyTest.run(NonLeakyTestSuite.java:63) 
     at junit.framework.TestSuite.runTest(TestSuite.java:243) 
     at junit.framework.TestSuite.run(TestSuite.java:238) 
     at android.support.test.internal.runner.junit3.DelegatingTestSuite.run(DelegatingTestSuite.java:103) 
     at android.support.test.internal.runner.junit3.AndroidTestSuite.run(AndroidTestSuite.java:63) 
     at android.support.test.internal.runner.junit3.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90) 
     at org.junit.runners.Suite.runChild(Suite.java:128) 
     at org.junit.runners.Suite.runChild(Suite.java:24) 
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
     at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
     at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
     at org.junit.runner.JUnitCore.run(JUnitCore.java:136) 
     at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:270) 
     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701) 
Caused by: android.support.test.espresso.AppNotIdleException: Looped for 3544 iterations over 60 SECONDS. The following Idle Conditions failed . 
     at android.support.test.espresso.IdlingPolicy.handleTimeout(IdlingPolicy.java:61) 
     at android.support.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:471) 
     at android.support.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:402) 
     at android.support.test.espresso.base.UiControllerImpl.injectMotionEvent(UiControllerImpl.java:226) 
     at android.support.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:135) 
     at android.support.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:118) 
     at android.support.test.espresso.action.Tap.sendSingleTap(Tap.java:135) 
     at android.support.test.espresso.action.Tap.access$100(Tap.java:35) 
     at android.support.test.espresso.action.Tap$1.sendTap(Tap.java:40) 
     at android.support.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:98) 
     at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction 

Trả lời

13

Đó là một lỗi trong mã ứng dụng của tôi, nơi SwipeRefreshLayout hoạt hình riêng của mình vô thời hạn. Do a bug in this component, trạng thái làm mới thậm chí không hiển thị.

+1

Cảm ơn bạn rất nhiều! Điều này đã khiến tôi phát điên; Tôi đã có một hình ảnh động quay chạy trong một đoạn trước đó chưa bao giờ bị xóa, vì vậy ứng dụng không nhàn rỗi và các bài kiểm tra Espresso sẽ bị treo. Thực ra, tôi đã nhận ra một tính năng tuyệt vời vì nó buộc nhà phát triển phải gọn gàng với hoạt ảnh và hành động nền. – MattMatt

+0

Cảm ơn bạn rất nhiều !!! Trong trường hợp của tôi, OffsetChangeListener của AppBarLayout được gọi liên tục nơi nó tùy biến AppBar bằng một Hoạt ảnh – Rajeshwar

Các vấn đề liên quan