gpt4 book ai didi

Android Espresso 不等待 fragment 加载

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:42 26 4
gpt4 key购买 nike

我刚开始使用 Espresso 测试 Android 应用程序,但我遇到了一些麻烦。我有一个带有按钮的 Activity ,该按钮以通常的方式替换 fragment :

public void onClick(View v) {
final FragmentTransaction t = getFragmentManager().beginTransaction();
t.setCustomAnimations(R.animator.fragment_slide_in_up, 0);
t.replace(R.id.fragment_container,
LogInFragment.newInstance(), LogInFragment.TAG)
.addToBackStack(LogInFragment.TAG);
t.commit();
}

在我的测试中,我点击发送新 fragment 的按钮,然后检查新 fragment 是否可见。

onView(withId(R.id.login_btn))
.perform(click());
Thread.sleep(500);
onView(withId(R.id.email_input))
.check(matches(isDisplayed()));

如果我从测试中删除了 Thread.sleep(),即使我从 Activity 代码中删除了 setCustomAnimations(),测试也会失败。

按照说明,我手机上的所有动画都已关闭。我的理解是 Espresso 知道 UI 线程的状态并且会等到一切准备就绪。但是如果我执行 onView(withId(R.id.widgetOnNewFragment)) 它每次都会爆炸。每次显示新 fragment 时,我都需要添加一个 Thread.sleep(500)

我错过了什么吗?我想我不应该在我的测试代码中添加几十个 Thread.sleep()。

最佳答案

当 Espresso 框架“等待”某些主 UI 线程 Activity 时,动画需要 IdlingResource 方法(正如 Honza 所建议的)。

good tutorials在这个概念上,甚至detailed implementations .

实际上,由于动画很少影响 UI 的功能测试,因此大多数开发人员禁用动画。 IMO,这是一个 anti-pattern因为它没有映射到真实的用户体验(大多数人购买手机并使用默认设置)。这是您必须自己做出的决定。如果您想将动画作为功能要求的一部分,可以使用 ways ,但它需要您重新实现和重写您的测试。

关于Android Espresso 不等待 fragment 加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43147380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com