我们可以在 aws 设备场中为 Android espresso 测试禁用一个对话框吗

Posted

技术标签:

【中文标题】我们可以在 aws 设备场中为 Android espresso 测试禁用一个对话框吗【英文标题】:Can we disable a dialog box in aws device farm for Android espresso tests 【发布时间】:2016-09-09 20:01:04 【问题描述】:

我们使用aws device farm 运行我们所有的android espresso 测试。如果您看到下图,则此对话框使我们的几次测试失败。

我们是否可以在运行测试时禁用此对话框?或者有没有一种方法可以在运行测试之前在控制台中运行adb 命令。 我将非常感谢您提供的任何意见。 谢谢

【问题讨论】:

【参考方案1】:

我不知道如何在 aws 之前的测试运行中使用 adb 来授予权限,但是...

另一种方法是使用 UiAutomator 处理系统对话框。此工具可与 Espresso 结合使用。

样本:

UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
UiObject button = device.findObject(new UiSelector().text("Allow"));
button.click();

必要的依赖:

androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'

我已经开始编写一个库,它应该可以让 espresso 和 uiautomator 的测试更加简单。这包括用于权限处理的工具。 https://github.com/nenick/espresso-macchiato 参见 EspPermissionDialog 和 EspPermissionsTool

【讨论】:

【参考方案2】: 使用 UIAutomator 是一种解决方法,但不推荐使用,因为这种方法与一种语言相关联,将另一个库添加到项目中只是为了破解,最糟糕的是,它会在您必须处理的所有测试中产生大量冗余代码弹出窗口。 Espresso 可以通过添加包含您需要的所有权限的适当规则(以逗号分隔)来处理权限:

@Rule public GrantPermissionRule mRuntimePermissionRule = GrantPermissionRule .grant(android.Manifest.permission.ACCESS_FINE_LOCATION);

见https://developer.android.com/reference/android/support/test/rule/GrantPermissionRule https://www.kotlindevelopment.com/runtime-permissions-espresso-done-right/

但实际上,根据所需的权限,一些用户报告说它不能按预期工作,并且已像 WRITE_EXTERNAL_STORAGE 一样发给谷歌(例如:https://issuetracker.google.com/issues/64389280)

另一种方法是使用亚行授予您权利:

adb shell pm grant your.package.name android.permission.ACCESS_FINE_LOCATION

在此处查看我的答案,了解如何在测试前在 espresso 中实施 adb 命令(它应该与 aws farm 兼容): https://***.com/a/52698720/10472007

希望对您有所帮助!

【讨论】:

以上是关于我们可以在 aws 设备场中为 Android espresso 测试禁用一个对话框吗的主要内容,如果未能解决你的问题,请参考以下文章

无法使用Java TestNG项目解决AWS设备场中的依赖项 - jar错误

无法读取 aws 设备场中的属性文件

在 aws devicefarm 中为一组特定的 android 手机创建设备池

在 aws-device 场中运行特定的 TestNG testng.xml 套件文件

是否可以从设备场中的 playstore 安装应用程序?

我们可以在 Route 53 (Aws) 中为单个 IP 添加多个域名吗