uiautomator单击/撤消应用程序权限列表

时间:2017-06-23 21:57:07

标签: android uiautomator android-uiautomator

我正在尝试使用uiautomator使用Google's sample app撤消应用程序详细信息中的应用程序权限。但是,我遇到了问题,我的uiautomator似乎得到了错误的切换状态。检查切换时,由于某些原因,uiautomator仍会返回false

我的最终目标是从具有不同索引的相同布局逐个切换按钮。

enter image description here

@Test
public void clickThruSettings() throws UiObjectNotFoundException {

// go to the target page and open the permissions list.
    Context context = InstrumentationRegistry.getContext();
    final Intent intent = new Intent();
    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    Uri uri = Uri.fromParts("package", BASIC_SAMPLE_PACKAGE, null);
    intent.setData(uri);
    context.startActivity(intent);
    UiObject permissions = mDevice.findObject(new UiSelector().text("Permissions"));
    permissions.clickAndWaitForNewWindow();

// toggle on and off with index for linearLayout.
    togglePermissionButton(true,0);  
    togglePermissionButton(false,1);
    togglePermissionButton(true,2);
    togglePermissionButton(false,3);
   }

 private void togglePermissionButton(boolean enabled, int index) throws UiObjectNotFoundException {
     UiObject permissionButton = mDevice.findObject(new UiSelector().className("android.widget.LinearLayout")
             .scrollable(false).index(index)).getChild(new UiSelector().className(android.widget.Switch.class
             .getName()));
     if (permissionButton.waitForExists(2000)&& permissionButton.exists()&& permissionButton.isEnabled()) {
         if (permissionButton.isChecked() != enabled) {
             permissionButton.click();
         }
     }
 }

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

索引是基于它的父级,不能像这样使用。 你可以直接找到带有实例属性的开关。

mDevice.findObject(new UiSelector().className(android.widget.Switch.class.getName()).instance(index));