2017-06-23 2 views
0

J'essaie d'utiliser uiautomator pour révoquer mes autorisations d'application dans les détails de l'application en utilisant Google's sample app. Cependant, je suis tombé en panne que mon uiautomator semble avoir le mauvais statut de bascule. Lorsque la bascule est cochée, pour certaines raisons, uiautomator me renvoie encore false.uiautomator cliquez sur/révoquer la liste des autorisations d'application

Mon but final est de faire basculer les boutons un par un à partir des mêmes mises en page avec des index différents.

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(); 
     } 
    } 
} 

Toutes les idées?

Répondre

0

L'index est basé sur son parent, ne peut pas être utilisé comme ceci. vous pouvez trouver directement le commutateur avec la propriété d'instance.

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