5

À l'aide d'espresso, nous cliquons sur un bouton de connexion qui lance un site Web externe (onglet personnalisé Chrome) dans lequel vous pouvez vous connecter puis rediriger vers notre application Android.Comment accéder aux éléments d'un site Web externe à l'aide d'Espresso

Y at-il une manière Espresso à:
1) Vérifiez l'URL correcte est en cours de lancement
2) L'accès aux éléments sur le site afin que je puisse entrer les informations de connexion et continuer à se connecter

enter image description here Lorsque j'essaie de l'afficher dans Espresso Launch Navigator, rien ne s'affiche pour la page, et si j'essaie d'enregistrer, il ne me semble pas que je puisse entrer quoi que ce soit sur la page.

C'est ce que j'ai jusqu'à présent (il est en Kotlin (non Java)): enter image description here

Et voici l'erreur qui obtient affiché: enter image description here

Il lance mon application, sélectionnez la bouton de connexion, ouvre le site mais il n'est pas en mesure d'accéder aux éléments.

J'ai aussi essayé:

enter image description here

Mise à jour: Il utilise Chrome onglets personnalisés (pas __gVirt_NP_NN_NNPS<__ Voir Web) si Web Espresso ne fonctionne pas.

+0

S'il vous plaît poste que vous code comme texte brut la prochaine fois, non pas comme des images. –

Répondre

1

j'ai pu résoudre ce problème en utilisant à la fois Espresso et Automator UI. Vous êtes capable de combiner les deux.La sélection du bouton de connexion J'ai utilisé Espresso (et le reste de l'application, je vais utiliser Espresso). Pour gérer l'onglet Personnaliser Chrome pour vous connecter, je UIAutomator:

enter image description here

+0

Merci beaucoup, beaucoup. Je n'aurais jamais pensé devoir appuyer deux fois sur le même bouton comme ça. Comment avez-vous compris, et pourquoi pensez-vous que c'est nécessaire? –

+0

Faites-vous référence au bouton de connexion? C'est en fait en cliquant sur un en-tête de connexion, puis sur le bouton de connexion, mais je devais le faire parce que j'en avais besoin pour rejeter le clavier qui apparaît. Le clavier couvrait le bouton de connexion, donc j'ai cliqué sur un élément ailleurs sur l'écran d'abord pour le faire disparaître et ensuite je pouvais accéder au bouton de connexion. J'espère que cela pourra aider! – rfodge

+0

Merci! Vous m'avez fait réaliser que j'avais le même problème, mais cela a fonctionné parce que mon sélecteur n'était pas assez précis et qu'il cliquait quelque chose de différent de ce que je pensais. Maintenant, je peux utiliser un sélecteur différent et plus évident. –

2

Mise à jour:

Vous ne pouvez pas utiliser Espresso pour Chrome onglets personnalisés. Espresso fonctionne lorsque vous testez votre propre application.

Pour tester les onglets Chrome, vous pouvez utiliser UI Automator mais vous ne voulez probablement pas le faire.

1) Vérifiez l'URL correcte est lancé

Un test unitaire serait suffisant ici. Vous devez juste vous assurer que l'URL transmise à la bibliothèque d'onglets personnalisés de Chrome est la bonne. Vous vous assurez que votre code fonctionne bien. Ce qui se passe ensuite est géré par la bibliothèque et les tests y appartiennent.

2) accéder aux éléments sur le site afin que je puisse entrer dans la connexion information et continuer à se connecter

Vous êtes ici tester une simple page web. Pourquoi voudriez-vous le surcoût supplémentaire de démarrer un émulateur? Peut-être Selenium ou tout ce qui est cool pour le web fonctionnerait ici (pas un dév Web)?

Vous pouvez utiliser Espresso Web

Voici un test d'exemple:

@Test 
public void typeTextInInput_clickButton_SubmitsForm() { 
    // Lazily launch the Activity with a custom start Intent per test. 
    mActivityRule.launchActivity(withWebFormIntent()); 

    // Selects the WebView in your layout. If you have multiple WebView objects, 
    // you can also use a matcher to select a given WebView, 
    // onWebView(withId(R.id.web_view)). 
    onWebView() 
     // Find the input element by ID. 
     .withElement(findElement(Locator.ID, "text_input")) 
     // Clear previous input. 
     .perform(clearElement()) 
     // Enter text into the input element. 
     .perform(DriverAtoms.webKeys(MACCHIATO)) 
     // Find the submit button. 
     .withElement(findElement(Locator.ID, "submitBtn")) 
     // Simulate a click using JavaScript. 
     .perform(webClick()) 
     // Find the response element by ID. 
     .withElement(findElement(Locator.ID, "response")) 
     // Verify that the response page contains the entered text. 
     .check(webMatches(getText(), containsString(MACCHIATO))); 
} 
+0

Qu'est-ce que withWebFormIntent()? De plus, j'ai lancé l'application en utilisant LaunchActivity, puis je sélectionne le bouton de connexion et c'est à ce moment-là que je veux utiliser une vue web. – rfodge

+0

Si j'essaie de le lancer avec JS activé (dans le remplacement pour afterActivityLaunched) il me donne: android.support.test.espresso.NoMatchingViewException: Aucune vue dans la hiérarchie trouvée correspondant: WebView avec JS activé – rfodge

+0

Question mise à jour avec plus d'informations sur ce J'ai actuellement – rfodge