如何超越android浓缩咖啡UI测试中的位置启用程序对话?
我正在用浓缩咖啡测试android的用户界面。我想在设置中关闭location的情况下运行测试,但由于location enabler对话框未通过其他测试,我被卡住了。我提到了我的观察结果和迄今为止我所做的尝试如何超越android浓缩咖啡UI测试中的位置启用程序对话?,android,android-permissions,android-espresso,Android,Android Permissions,Android Espresso,我正在用浓缩咖啡测试android的用户界面。我想在设置中关闭location的情况下运行测试,但由于location enabler对话框未通过其他测试,我被卡住了。我提到了我的观察结果和迄今为止我所做的尝试 使用UiAutomator,它只在单个测试用例上工作,但在 完成测试套件的运行 使用了“授予权限”规则,它授予了权限,但对话仍然存在 存在 使用机器人电气,对问题没有影响 使用阴影操作,对问题没有影响 我还附上了位置对话的样本图像。 谢谢。目前我正在使用grantPerms方法,该
- 使用UiAutomator,它只在单个测试用例上工作,但在 完成测试套件的运行李>
- 使用了“授予权限”规则,它授予了权限,但对话仍然存在 存在李>
- 使用机器人电气,对问题没有影响
- 使用阴影操作,对问题没有影响
谢谢。目前我正在使用grantPerms方法,该方法应添加到所有测试类(all=需要访问android权限的测试类),因此我只需在正确的时间调用它(如果应用程序需要perms) 计划如下:
public class MyClass {
// Rules etc.
@Test
public void myTestWithPerms() {
// click view, if it's need permissions to camera etc., just call
grantPerms(); //calling inner grantPerms method
// Another code, if you need access to gallery now
grantPerms(); //calling inner grantPerms method
// Some test code
}
private void grantPerms(){
// grantPermsCode
}
}
或者你的意思是什么
更新 我明白了,所以我会举一个例子说明我是如何解决这个问题的,对我来说这是一个很好的解决方案
- 示例:假设您有一个与手机联系人交互的应用程序(第一次点击应用程序中的“联系人btn”会引发android权限警报“拒绝/允许”btn)
- 因此,当前您的测试将具有一个行结构(访问活动/屏幕->通过某些参数(标题、ID、包名等)检查UI组件的存在情况->单击此组件)
- 现在,在第一次点击之后您应该执行android权限警报(您知道在哪个操作(点击等)之后应该显示此警报)
- 因此,您只需在上面添加的test类(当前需要访问android权限)中创建一个内部私有方法
更新2:通常您无法通过编程方式打开GPS服务,因为android v.4.2不允许这样做,所以通常最好在测试开始前手动打开GPS服务,但请看一下这一点 解决方案,可能是这就是您想要的:
}public class MyTestClass { // Rules etc. @Test public void myTestWithTurnOnGPS() { // once access the map check alert presence tapTurnOnGpsBtn(); //call inner **tapTurnOnGpsBtn** method } private void tapTurnOnGpsBtn() throws UiObjectNotFoundException { UiObject allowGpsBtn = device.findObject(new UiSelector() .className("android.widget.Button").packageName("com.google.android.gms") .resourceId("android:id/button1") .clickable(true).checkable(false)); device.pressDelete(); // just in case to turn ON blur screen (not a wake up) for some devices like HTC and some other if (allowGpsBtn.exists() && allowGpsBtn.isEnabled()) { do { allowGpsBtn.click(); } while (allowGpsBtn.exists()); } }
因此,这个方法应该在你的应用程序中的所有地方调用,这些地方可能会引发GPS警报()我的意思是提供实时权限弹出窗口,使该解决方案的测试崩溃?因此,如果我没有错,并且正确理解了你的意思,那么你有单独的测试类,允许android 6+的权限(基于UIautomator)这个单独的测试类工作得很好-下一步,当你运行包括授予权限测试类的测试套件时,你在app start上只获得了可请求的权限,但你想在app start上允许所有这些权限?是的,这几乎是一样的,但问题是,如果我运行单文件测试,它运行得非常好。如果运行整个UI文件,则测试会崩溃,因为弹出窗口会阻止测试。我已经编辑了我的评论,通常您应该在每个操作后调用内部授予perms方法(允许android权限),该操作假设会引发android权限警报。您是否需要允许权限的授予权限方法的代码示例和使用示例?是的,请提供一个示例,以便我了解如何解决上述问题。