5

Mit Espresso klicken wir auf eine Login-Schaltfläche, die eine externe Website (Chrome Custom Tab) startet, wo Sie sich anmelden können und dann zu unserer Android-Anwendung weitergeleitet wird.Zugriff auf Elemente auf einer externen Website mit Espresso

Gibt es eine Möglichkeit in Espresso zu:
1) Überprüfen Sie die korrekte URL gestartet wird
2) auf der Website, um die Elemente zugreifen, so dass ich die Login-Daten eingeben und weiter

enter image description here anmelden

Wenn ich es im Espresso Launch Navigator anschaue, wird nichts auf der Seite angezeigt, und wenn ich versuche, aufzunehmen, kann ich nichts auf der Seite eingeben.

Das ist, was ich bisher haben (es in Kotlin ist (nicht Java)): enter image description here

Und hier ist der Fehler, der angezeigt wird: enter image description here

Es ist meine Anwendung startet, wählen Sie die login button, öffnet die Website, kann aber nicht auf die Elemente zugreifen.

ich auch versucht:

enter image description here

Update: Dies wird mit Chrome Benutzerdefinierte Tabs (kein Web-Ansicht) so Espresso Web funktioniert nicht.

+0

Bitte schreiben Sie Code als Klartext beim nächsten Mal nicht als Bilder. –

Antwort

1

ich dieses Problem lösen konnte sowohl Espresso und UI Automator verwenden. Sie können die beiden kombinieren.Die Auswahl der Login-Taste habe ich Espresso verwendet (und den Rest der App, ich werde Espresso verwenden). Um die Chrome Registerkarte Benutzerdefinierte für die Anmeldung zu behandeln, habe ich UIAutomator:

enter image description here

+0

Vielen Dank, so viel. Ich hätte nie herausgefunden, dass ich den gleichen Knopf zweimal drücken muss. Wie hast du es herausgefunden, und warum denkst du, dass es notwendig ist? –

+0

Beziehen Sie sich auf die Schaltfläche "Anmelden"? Es klickt tatsächlich zuerst auf ein Zeichen in der Kopfzeile und dann auf die Schaltfläche "Anmelden", aber ich musste das tun, weil ich es brauchte, um die Tastatur, die auftaucht, zu verwerfen. Die Tastatur überdeckte den Anmeldeknopf, also klickte ich zuerst irgendwo auf dem Bildschirm auf ein Element, um es zu entfernen, und dann konnte ich auf den Anmeldeknopf zugreifen. Ich hoffe, das hilft! – rfodge

+0

Danke! Du hast mir klar gemacht, dass ich das gleiche Problem habe, aber es hat funktioniert, weil mein Selektor nicht spezifisch genug war und etwas anders klickte, als ich dachte. Jetzt kann ich einen anderen, offensichtlicheren Selektor verwenden. –

2

Update:

Sie können nicht Espresso verwenden zum Testen Chrome Benutzerdefinierte Tabs. Espresso funktioniert beim Testen Ihrer eigenen App.

Zum Testen der Chrome-Registerkarten könnten Sie UI Automator verwenden, aber das möchten Sie wahrscheinlich nicht tun.

1) Stellen Sie sicher, die korrekte URL

ins Leben gerufen wird, hier würde ausreichen, um

Ein Unit-Test. Sie müssen nur sicherstellen, dass die URL, die an die benutzerdefinierte Chrome-Tab-Bibliothek übergeben wird, die richtige ist. Sie stellen sicher, dass Ihr Code einwandfrei funktioniert. Was als nächstes passiert, wird von der Bibliothek behandelt und die Tests gehören dorthin. Besuchen

2) auf der Website der Elemente so, dass ich die Login Informationen eingeben können und weiterhin

Hier anmelden Sie eine einfache Web-Seite testen. Warum möchten Sie den zusätzlichen Aufwand beim Starten eines Emulators? Vielleicht Selenium oder was auch immer ist cool für das Web würde hier funktionieren (kein Web-Entwickler)?

können Sie Espresso Web verwenden

Hier ist ein Beispiel-Test:

@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

Was ist der withWebFormIntent()? Außerdem habe ich die App bereits mit der LaunchActivity gestartet, dann wähle ich die Login-Schaltfläche und dann möchte ich eine Webansicht verwenden. – rfodge

+0

Wenn ich versuche, es mit JS aktiviert zu starten (in der Überschreibung für AfterActivityLaunched) gibt es mir: android.support.test.espresso.NoMatchingViewException: Keine Ansichten in der Hierarchie gefunden übereinstimmend: WebView mit JS aktiviert – rfodge

+0

Aktualisierte Frage mit mehr Informationen zu was Ich habe derzeit – rfodge

Verwandte Themen