安卓:Espresso,未找到匹配的视图层级

15

我正在测试在我的活动中启动片段,所以在单击按钮以启动片段后,我测试了已启动片段中视图中的文本是否存在,但测试失败,即使该片段已在我的手机上启动,甚至在视图层次结构中显示该文本存在:

View Hierarchy:

+--------->AppCompatTextView{id=2131886318, res-name=text3_textView, visibility=VISIBLE, width=768, height=68, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=695.0, text=Pour finaliser votre inscription nous avons besion
d'une photo de profil, input-type=0, ime-target=false, has-links=false}

测试在此处失败:

onView(withText("photo de profil")).check(matches(isDisplayed()));

我在想为什么Espresso未通过此测试,是因为它没有等待片段启动吗?

顺便说一下,我关闭了动画。

3个回答

13

1
哥们,非常感谢你,我简直不敢相信我浪费了一整天的时间在那上面。 - Abdennacer Lachiheb
1
@AbdenaceurLichiheb 这就是为什么我们有堆栈溢出的原因,每个人都有这种感觉,我很高兴能帮助你 :D - jonathanrz
这是一个临时补丁,如果屏幕上有多个位置包含重复文本,则它将无法正常工作。 - Jayesh L

3

我正在做什么:

    @Rule
    @JvmField
    var mActivityTestRule = ActivityTestRule(SplashScreenActivity::class.java)

由于这个规则,Espresso Library在SplashScreenActivity上搜索登录EditText视图。不幸的是,这个登录EditText视图实际上存在于LoginActivity中,因此测试用例失败并出现了上述错误。
为了使一切正常工作,我做了以下工作:
    @Rule
    @JvmField
    var mActivityTestRule = ActivityTestRule(LoginActivity::class.java)

当我将上述规则中的ActivitySplashScreenActivity更改为LoginActivity时,Espresso轻松找到了此登录EditText视图,并且所有测试都通过了。

只需确保您将Espresso指向实际存在View的正确Activity/Fragment.


0
如果您尝试访问未显示的某个视图,则会看到此错误。例如,您想单击某个按钮,但整个屏幕未显示。
然后,您可以在操作周围简单地使用try-catch块。它可以应用于Kakao库和Espresso,我认为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接