Эспрессо, найди диалог и отклони его - PullRequest
0 голосов
/ 27 сентября 2019

Я попытался найти кнопку отмены диалога и нажать ее в Espresso UI Testing, но не смог.

Это мой код.

onView(withId(R.id.dialog_close_button)).check(matches(isDisplayed()))

Какое лучшее решениеза это?

Пожалуйста, прокомментируйте свое мнение.

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Если это диалоговое окно Android и вы используете две кнопки, вы можете найти вид с помощью:

onView.withId(android.R.id.button1).perform(ViewActions.click()) //Click on accept button
onView.withId(android.R.id.button2).perform(ViewActions.click()) //Click on cancel button

Если вы хотите проверить, видны ли они, вы хотите использовать:

assert onView.withId(android.R.id.button1).check(matches(ViewMatchers.isDisplayed()))

Тогда, если вам не нужен Android, просто замените идентификаторы на ваши, и они должны работать, помните , если у вас есть дублированные идентификаторы, он будет жаловаться

РЕДАКТИРОВАТЬ

Я предлагаю использовать Layout Inspector, чтобы вы могли найти идентификатор каждого компонента вашего экрана и заменить его старым ответом.

Итак, выполните следующие действия:

  1. Откройте приложение и найдите этот диалог
  2. Затем перейдите на Tools> Layout Inspector> Выберите свой процессор
  3. Нажмите на элемент, который вы хотите щелкнутьEspresso
  4. Замените его на onView.withId(HERE_GOES_THE_ID)...
0 голосов
/ 30 сентября 2019

Вы должны добавить RootMatcher isDialog(), чтобы соответствовать корням, которые являются диалогами (то есть не является окном возобновленной в данный момент операции).

И также не забудьте выполнитьнажмите на эту кнопку, если вы хотите закрыть диалоговое окно, как вы сказали в заголовке.

Используйте этот код:

onView(withId(R.id.dialog_close_button))
    .inRoot(isDialog())
    .check(matches(isDisplayed()))
    .perform(click());
0 голосов
/ 27 сентября 2019

Если вы используете UI-Automator с AndroidX, вы можете найти диалоговое окно и кнопки.

Это код зависимости gradle.

dependencies {
    androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
}

С этой кнопкой можно связатьсякод.

Это код Котлина.

val cancel = activityTestRule.activity.getString(R.string.dialog_cancel_button)
val button = UiDevice
    .getInstance(InstrumentationRegistry.getInstrumentation())
    .findObject(
        UiSelector()
            .text(cancel.toUpperCase())
            .text(cancel)
    )
if (button.exists() && button.isEnabled) {
    button.click()
}
...