Android: как ждать, когда EditText станет видимым для ввода с помощью эспрессо - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу выполнить ввод для EditText с visibility=gone в начале.

У меня есть макет с видимым ProgressBar и пропущенный EditText.После некоторой фоновой операции я меняю видимые состояния обоих виджетов.ProgressBar скрывается и показывает EditText.

Поэтому, когда я запускаю этот тест:

class ExampleInstrumentedTest {

    private var mIdlingResource: IdlingResource? = null

    @Before
    fun registerIdlingResource() {
        val activityScenario = ActivityScenario.launch(MainActivity::class.java)
        activityScenario.onActivity {
            fun perform(activity: MainActivity) {
                mIdlingResource = activity
                // To prove that the test fails, omit this call:
                IdlingRegistry.getInstance().register(mIdlingResource!!)
            }
        }
    }

    @Test fun listGoesOverTheFold() {
        onView(withId(R.id.editText2)).perform(typeText("ABC"))
        onView(withId(R.id.btnSubmit)).check(matches(isEnabled()))
    }

    @After
    fun unregisterIdlingResource() {
        if (mIdlingResource != null) {
            IdlingRegistry.getInstance().unregister(mIdlingResource)
        }
    }
}

Сбой эспрессо, потому что:

Причина: java.lang.RuntimeException: Действие не будет выполнено, потому чтоцелевое представление не соответствует одному или нескольким из следующих ограничений: ((отображается на экране пользователю) и (поддерживает методы ввода или назначается из класса: class android.widget.SearchView))

Это моя активность:

private var mIdlingResource = CustomIdlingResource()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    progressBar.visibility = View.VISIBLE
    mIdlingResource.setIdleState(false)
    BillingFormRepositoryService().load(object : BillingFormRepository.BillingFormCallback {
        override fun onSuccess(billingFormLoadedViewState: BillingFormLoadedViewState) {
            progressBar.visibility = View.GONE
            editText2.visibility = View.VISIBLE
            mIdlingResource.setIdleState(true)
        }
    })
}
...