Нет совпадений внутри InteractionBuilder. Как указать Kakao view UI-элемент, используя его классы? - PullRequest
0 голосов
/ 10 октября 2019

Я использую инфраструктуру Espresso для своих UI-тестов, и теперь я хочу использовать Kakao. У меня есть MainPage с некоторым представлением, и это представление можно найти следующим образом:

class MainPage() {
    val screenTitle =
        CoreMatchers.allOf(
            withText("Main page"),
            withParent(withId(R.id.mediaViewToolbar))
        )
}

В тестовом случае Espresso эти строки работают без проблем

val mainPage = MainPage()
onView(mainPage.screenTitle).check(matches(isDisplayed()))

Затем я попытался переписать этоMainPage с его видом в стиле Kakao:

class MainScreen : Screen<MainScreen>() {
    // here i faced a problem
    val screenTitle = KBaseView<Matcher<View>>{    // this 2-nd line* is refferenced by error 
        CoreMatchers.allOf(
            ViewMatchers.withText("Main page"),
            ViewMatchers.withParent(ViewMatchers.withId(R.id.mediaViewToolbar))
        )
    }
}

И если попытаться написать тестовый пример в стиле Kakao

val mainScreen = MainScreen()
mainScreen {
    screenTitle {
        isDisplayed()
    }
}

Тогда я получаю следующую ошибку:

E/TestRunner: failed: should_check_main_page(com.project.online.MainScreenKaspressoTest)
    ----- begin exception -----
    java.lang.IllegalStateException: No matchers inside InteractionBuilder
        at com.agoda.kakao.common.builders.ViewBuilder.getViewInteractionDelegate(ViewBuilder.kt:395)
        at com.agoda.kakao.common.views.KBaseView.<init>(KBaseView.kt:42)
        at com.project.online.MainScreen.<init>(MainScreen.kt:2)* - 2-nd line

Я понимаю, что я указываю screenTitle в MainScreen неправильно, но как правильно? Спасибо!

1 Ответ

1 голос
/ 10 октября 2019

Kakao использует свой ViewBuilder DSL для создания необходимых сопоставлений для представления. Вот как вы должны это определить:

val screenTitle = KTextView {
  withText("Main page")
  withParent { withId(R.id.mediaViewToolbar) }
}

Какао автоматически применяет allOf() ко всем вызванным сопоставителям.

...