InteractionBuilder 中没有匹配器。如何使用其 类 指定 Kakao 视图 UI-元素?
No matchers inside InteractionBuilder. How to specify Kakao view UI-element using its classes?
我在 UI 测试中使用 Espresso 框架,现在我想使用 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()))
然后我尝试用 Kakao 风格的视图重写这个 MainPage:
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
我知道我在 MainScreen 中以错误的方式指定了 screenTitle
,但如何正确?
谢谢!
Kakao 依靠其 ViewBuilder
DSL 为视图构建必要的匹配器。
以下是您应该如何定义它:
val screenTitle = KTextView {
withText("Main page")
withParent { withId(R.id.mediaViewToolbar) }
}
Kakao 会自动将 allOf()
应用于所有调用的匹配器。
我在尝试使用 kaspresso(构建在 Kakao 之上的包装器)时也遇到了类似的问题
这个想法与之前答案中使用的想法或多或少相同,但您必须在使用任何自定义匹配器之前添加 withMatcher()
函数。
所以在你的情况下,它将变成
val screenTitle = KTextView {
withText("Main page")
withMatcher { //your custom matcher }
}
我在 UI 测试中使用 Espresso 框架,现在我想使用 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()))
然后我尝试用 Kakao 风格的视图重写这个 MainPage:
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
我知道我在 MainScreen 中以错误的方式指定了 screenTitle
,但如何正确?
谢谢!
Kakao 依靠其 ViewBuilder
DSL 为视图构建必要的匹配器。
以下是您应该如何定义它:
val screenTitle = KTextView {
withText("Main page")
withParent { withId(R.id.mediaViewToolbar) }
}
Kakao 会自动将 allOf()
应用于所有调用的匹配器。
我在尝试使用 kaspresso(构建在 Kakao 之上的包装器)时也遇到了类似的问题
这个想法与之前答案中使用的想法或多或少相同,但您必须在使用任何自定义匹配器之前添加 withMatcher()
函数。
所以在你的情况下,它将变成
val screenTitle = KTextView {
withText("Main page")
withMatcher { //your custom matcher }
}