2015-02-03 1 views
2

Я использую Espresso 2 для проверки того, что кнопка включена или нет. Мой код выглядит следующим образом:Espresso 'enabled' не соответствует выбранному виду

onView(withId(R.id.fragment_vote_pause_btn)).check(matches(isEnabled())); 

Моя кнопка определяется как:

<Button 
     android:id="@+id/fragment_vote_pause_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:background="@android:color/transparent" 
     android:text="@string/audiowave_pause_or_play" 
     android:textColor="@drawable/play_pause_button_selector" 
     android:textAllCaps="false" 
     android:textSize="12sp" /> 

Иногда тест работает, но иногда я получаю это исключение:

android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 'is enabled' doesn't match the selected view. 
Expected: is enabled 
Got: "Button{id=2131296458, res-name=fragment_vote_pause_btn, visibility=INVISIBLE, width=329, height=144, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=true, is-enabled=false, is-focused=false, is-focusable=true, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=375.0, y=649.0, text=Tap to play or pause, input-type=0, ime-target=false, has-links=false}" 

at dalvik.system.VMStack.getThreadStackTrace(Native Method) 
at java.lang.Thread.getStackTrace(Thread.java:580) 
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:82) 
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.check(ViewInteraction.java:158) 
at be.appfoundry.identify.ui.VoteActivityTest.test2PlayPauseButton(VoteActivityTest.java:39) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
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:1837) 
Caused by: junit.framework.AssertionFailedError: 'is enabled' doesn't match the selected view. 
Expected: is enabled 
Got: "Button{id=2131296458, res-name=fragment_vote_pause_btn, visibility=INVISIBLE, width=329, height=144, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=true, is-enabled=false, is-focused=false, is-focusable=true, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=375.0, y=649.0, text=Tap to play or pause, input-type=0, ime-target=false, has-links=false}" 

at android.support.test.espresso.matcher.ViewMatchers.assertThat(ViewMatchers.java:955) 
at android.support.test.espresso.assertion.ViewAssertions$2.check(ViewAssertions.java:89) 
at android.support.test.espresso.ViewInteraction$2.run(ViewInteraction.java:170) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Кто-нибудь идея?

ответ

3

Мне кажется, что ваша кнопка не отображается на тот момент, когда вы проверяете, включено ли она или нет.

Может быть, что проверка на кнопку/кнопку, которая еще не активирована? Также может быть, что операции не синхронизированы, и вам придется ждать, пока ресурс будет включен/отображен при использовании ресурсов холостого хода. Дело может быть: 1) активность не полностью открыта/загружена (адаптер и т. Д.) 2) жесты не завершены полностью (прокрутка и т. Д.) 3) после щелчка по сообщениям .... 4) Другая ситуация, когда ваша кнопка заблокирована/не видна

Какой у вас случай? Вы видели на экране устройства, когда он не работает?

Эта ссылка может быть также полезно - https://code.google.com/p/android-test-kit/wiki/EspressoSamples

+0

Моя кнопка видна с самого начала, но она не включена с самого начала. – user1007522

+0

Как я понял, это видно, но не включено ... Некоторые действия включают его, и вы хотели бы проверить, включено ли оно или нет. Но ошибка показывает, что в момент вашего проверки это с 'visibility = INVISIBLE' &' is-enabled = false'. У вас есть синхронизация с активизацией? – Anna

+0

Вы были правы. В коде кнопка была отключена в xml. – user1007522