如何在 UI 测试 Espresso android 中超越位置启用对话?

How to surpass location enabler dialogue in UI testing Espresso android?

我正在使用 Espresso UI 测试 android。我想 运行 在设置中关闭位置的测试,但由于其他测试失败,我被位置启用对话框卡住了。我已经提到了我的观察和我到目前为止所做的尝试

我还附上了位置对话的样本图片。

谢谢。

目前我正在使用 grantPerms 方法,该方法应该添加到所有测试 classes(所有 = test-classes 需要访问 android 权限)所以我只是打电话在正确的时间(如果应用程序需要烫发)。

方案如下:

     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
        }
}

或者您的意思是具体的?


更新 我明白了,所以我将举例说明我是如何解决它的,对我来说这是一个很好的解决方案。

  • 示例: 假设您有一些与 phone 联系人互动的应用程序(在您的应用程序中第一次点击 "Contact btn" 应该会导致 android 权限提醒 "Deny/Allow" btns)
  • 所以目前你的测试将有一个line-wise结构(访问activity/screen - >通过某些参数检查UI组件的存在(标题、ID、包名称等...) -> 单击此组件)
  • 现在在第一次点击后 你应该执行 android 权限警报(你知道在哪个操作(点击等)之后应该显示此警报)
  • 所以你只需要在你的测试中创建一个内部私有方法 class(目前需要访问android权限) 上面添加了方案


    UPDATE2: 通常你不能以编程方式打开 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 警报的地方调用 ()