我正在尝试自动禁用这篇文章中描述的动画,但这似乎只适用于connectedAndroidTest
的命令行调用。我想在Studio中使用图形化测试运行器,列表框显示通过/失败的测试。有了这个运行器,权限授予(adb shell pm grant ... android.permission.SET_ANIMATION_SCALE
)永远不会运行,似乎是因为gradle任务installDebugAndroidTest
永远不会运行,相反,运行器正在运行gradle直到assembleDebugAndroidTest
(或我在运行配置中指定的任何替代gradle任务),然后在运行测试之前立即通过其他(非gradle ?)方法安装com.mypackage.test
。因此,任何先前授予的权限都将被该安装重置。
我如何在图形测试运行器安装测试包和运行测试之间授予SET_ANIMATION_SCALE
?
您可以使用反射,向清单添加权限,创建一个Espresso TestRule和一个任务(在这里详细解释)。
将权限添加到调试/模拟变量的清单中:
<uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/>
创建您自己的任务依赖于installDebug
,并使connectedDebugAndroidTest
依赖于您的任务。您还需要授予 SET_ANIMATION_SCALE权限进行测试。
创建一个测试规则,在内部使用反射来检索和恢复动画比例(代码):
public class AnimationAwareWonderTestRule extends AnimationAwareAwesomeTestRule {
private float[] mAnimationScales;
@Override
protected void before() throws Throwable {
mAnimationScales = AnimationAwareWonder.tryToRetrieveAndDisableAnimationsAndTransitions();
}
@Override
protected void after() throws Throwable {
AnimationAwareWonder.tryToRestoreAndEnableAnimationsAndTransitions(mAnimationScales);
}
}
它可以工作,但似乎目前不可能在MarshMallow中使用此权限。