过渡动画比例不会禁用应用内的动画。

10

在进行Espresso UI测试时,我遇到了一个问题:我想禁用我的应用程序内的动画,这样我就不需要设置超时/等待动画完成。

在我的Android设备上,在开发者选项中禁用窗口动画比例、转换动画比例和动画器持续时间比例并不能禁用使用Android的导航组件在片段之间导航时的动画。

动画设置如下:

<action
    android:id="@+id/confirmationAction"
    app:destination="@id/confirmationFragment"
    app:enterAnim="@anim/slide_in_right"
    app:exitAnim="@anim/slide_out_left"
    app:popEnterAnim="@anim/slide_in_left"
    app:popExitAnim="@anim/slide_out_right" />

在运行我的Espresso UI测试时,我该如何禁用此动画?

更新:

我遵循了Google关于使用导航组件在片段之间导航的这个指南

然后,我查看了Google有关使用Espresso测试应用程序的指南,在我找到的第一个指南第二个指南上,第一步都是通过开发人员选项禁用动画,因此我认为这是禁用动画的正确方法。


1
我自己正在寻找解决这个问题的答案。 - sarora
2个回答

0

经过更多的研究,我发现Espresso会自动等待UI线程上的所有动画完成后再执行断言。

通常情况下,如果您使用普通动画,您不需要做任何事情。

如果您需要在Espresso测试中等待服务调用返回值,则可以编写一些代码(kotlin)来扩展ViewInteraction类。在您的扩展类中,您可以执行check方法并捕获任何错误。如果出现错误,您可以给一个小超时时间(20ms),并尝试使用while循环再次执行它。当2-3秒后仍然有异常时,您可以直接抛出该异常。


0

我遇到了同样的问题,最好的解决方法是在运行测试时以编程方式禁用导航动画:

fun getBuilderWithAdditionalNavOptions(): NavOptions.Builder {
  val optionsBuilder = NavOptions.Builder()
  if (inTest)
    optionsBuilder
      .setEnterAnim(0).setExitAnim(0)
      .setPopEnterAnim(0).setPopExitAnim(0)

  return optionsBuilder
}

其中inTest是一个项目范围内的变量,当您运行Espresso测试时,它被设置为true


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