Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何超越android浓缩咖啡UI测试中的位置启用程序对话?_Android_Android Permissions_Android Espresso - Fatal编程技术网

如何超越android浓缩咖啡UI测试中的位置启用程序对话?

如何超越android浓缩咖啡UI测试中的位置启用程序对话?,android,android-permissions,android-espresso,Android,Android Permissions,Android Espresso,我正在用浓缩咖啡测试android的用户界面。我想在设置中关闭location的情况下运行测试,但由于location enabler对话框未通过其他测试,我被卡住了。我提到了我的观察结果和迄今为止我所做的尝试 使用UiAutomator,它只在单个测试用例上工作,但在 完成测试套件的运行 使用了“授予权限”规则,它授予了权限,但对话仍然存在 存在 使用机器人电气,对问题没有影响 使用阴影操作,对问题没有影响 我还附上了位置对话的样本图像。 谢谢。目前我正在使用grantPerms方法,该

我正在用浓缩咖啡测试android的用户界面。我想在设置中关闭location的情况下运行测试,但由于location enabler对话框未通过其他测试,我被卡住了。我提到了我的观察结果和迄今为止我所做的尝试

  • 使用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权限警报。您是否需要允许权限的授予权限方法的代码示例和使用示例?是的,请提供一个示例,以便我了解如何解决上述问题。