12

L'exécution de tests sur les périphériques Android avec sdk 26 entraîne leur échec à cause de la nouvelle fonctionnalité Autofill qui masque les champs lorsque l'espresso essaie de les cliquer. Je cours mes tests sur le laboratoire de test Firebase, donc je ne peux pas les désactiver manuellement sur mes appareils de test.Comment désactiver la nouvelle fonctionnalité de remplissage automatique d'Android Oreo pour les tests d'expresso

Quelques images:

1. Mot de passe est visible avant de cliquer sur champ Nom d'utilisateur.

enter image description here

2. Après avoir cliqué sur champ Mot de passe champ nom d'utilisateur est masqué par cette boîte de dialogue Remplissage automatique:

enter image description here

3. Après connexion, il montre une autre boîte de dialogue de remplissage:

enter image description here

Espresso ne peut pas cliquer sur le champ mot de passe depuis l'autofi ll dialogue masque mon champ et fail.

L'utilisation de AutofillManager#disableAutofillServices() n'a désactivé que le # 2. dialogue mais # 3. est toujours là. Comment désactiver le remplissage automatique sur les appareils de test?

+0

par un service de réponse supprimé, Paramètres> Système> Avancé> Autofill> Set "Aucun". – CommonsWare

+0

@CommonsWare Je n'ai pas accès aux paramètres sur les périphériques à partir de nuages ​​comme Firebase, je dois désactiver ceux du code avant les tests – Caipivara

Répondre

1

adb shell pm disable com.google.android.gms/com.google.android.gms.autofill.service.AutofillService

Cela devrait désactiver le service de saisie semi-automatique. Cela revient à désactiver manuellement le service de remplissage automatique dans les paramètres du système. Il a au moins travaillé sur l'émulateur. Mais cela nécessite un accès root.

Une autre façon de désactiver le service de remplissage automatique consiste à modifier les paramètres autofill_service.

adb shell settings put secure autofill_service null

+0

Le dernier 'shell settings adb mettre sécurisé autofill_service null' travaillé! Merci mec – Caipivara

2

Sur la base de la documentation, vous pouvez désactiver les services à l'aide AutofillManager#disableAutofillServices() API Autofill:

Si l'application d'appeler cette API a permis à des services de remplissage automatique, ils seront désactivés.

Utilisation:

 

    val autofillManager: AutofillManager = context.getSystemService(AutofillManager::class.java) 
    autofillManager.disableAutofillServices() 
 

Vous pouvez le faire en @Before étape de votre test.

+0

Il a supprimé la boîte de dialogue "Appuyez pour laisser Google" mais affiche encore "Enregistrer le mot de passe à AUTOFILL avec GOOGLE" . – Caipivara

+1

Je n'ai pas d'appareil O et je ne trouve pas l'application "Autofill with Google" dans l'émulateur. Je pense que vous pouvez essayer de désactiver cette application via la commande adb shell ([comment?] (Https://stackoverflow.com/a/35157119/1083957)) lors d'un test instrumenté: 'adb shell pm disable package.name.of. autofill.with.google'. – azizbekian

+0

vous pouvez le trouver dans les 'Paramètres' pour un émulateur O Android. – Caipivara

0

Désactiver le remplissage automatique lors des tests. Définir une classe TestRunner dans gradle

defaultConfig { 
    testInstrumentationRunner "com.cover.android.TestRunner" 
} 

puis

public class TestRunner extends AndroidJUnitRunner { 

@Override 
public void onCreate(Bundle arguments) { 
    super.onCreate(arguments); 
    CustomEditText.TESTING = TRUE; 
    } 

puis utilisez une version personnalisée de EditText

public class CustomEditText extends AppCompatEditText { 
public static boolean TESTING = false; 
public CustomEditText(Context context) { 
    super(context); 
} 

@Override 
public int getAutofillType() { 
    return TESTING? AUTOFILL_TYPE_NONE : super.getAutofillType(); 
} 
+0

Il est mauvais de changer tous les 'EditText' dans mon application juste pour ce purpuse mais merci – Caipivara

0

Selon la documentation: lorsque la vue se concentre sur et est partie d'un ensemble de données. L'application peut être notifiée lorsque l'affordance est affichée en enregistrant un AutofillManager.AutofillCallback via registerCallback (AutofillCallback). Lorsque l'utilisateur sélectionne un ensemble de données à partir de l'affordance, toutes les vues présentes dans l'ensemble de données sont remplies automatiquement, via des appels à remplissage automatique (AutofillValue) ou à remplissage automatique (SparseArray).

Le contexte est alors terminé lorsque l'un des cas suivants:

  1. commit() est appelée ou toutes les vues enregistrables sont partis.
  2. cancel() est appelée.

Il est sûr d'appeler dans ses méthodes à partir de n'importe quel thread.

Les instances de cette classe doivent être obtenues à l'aide de Context.getSystemService (Class) avec l'argument AutofillManager.class.

Utilisation: disableAutofillServices() pour désactiver le service.