【问题标题】:Transition animation scale does not disable animation inside application过渡动画比例不会禁用应用程序内的动画
【发布时间】:2020-04-04 23:34:45
【问题描述】:

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

在我的 android 设备上的开发人员选项中禁用 Window 动画比例、Transition 动画比例、Animator 持续时间比例不会在使用 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 测试时禁用此动画?

更新:

我关注了this guide of google关于使用导航组件在片段之间导航的内容。

然后我查看了谷歌关于使用 Espresso 和 the first guidethe second guide 测试我的应用程序的指南,我发现第一点是通过开发人员选项禁用动画,因此我认为这是禁用动画的正确方法

【问题讨论】:

  • 自己寻找这个问题的答案。

标签: android animation navigation android-espresso


【解决方案1】:

我遇到了同样的问题,我能想到的最好办法就是以编程方式禁用导航动画,以防我正在运行测试:

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

  return optionsBuilder
}

其中inTest 是项目范围的变量,在您运行 espresso 测试时设置为 true

【讨论】:

    【解决方案2】:

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

    如果你使用普通动画,通常你没有任何事情可做..

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

    【讨论】:

      猜你喜欢
      • 2017-12-04
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      相关资源
      最近更新 更多