5

Korzystając z espresso, klikamy przycisk logowania, który uruchamia zewnętrzną stronę internetową (zakładka niestandardowa Chrome), na której można się zalogować, a następnie przekierowuje z powrotem do naszej aplikacji na Androida.Jak uzyskać dostęp do elementów na zewnętrznej stronie internetowej przy użyciu espresso

Czy istnieje sposób w Espresso do:
1) Sprawdzić prawidłowy adres URL zostaje uruchomiony
2) dostęp do elementów na stronie internetowej tak, że mogę wprowadzić informacje logowania i nadal zalogować

enter image description here

Kiedy próbuję przeglądać go w Espresso Launch Navigator, nic nie wyświetla się na stronie, a jeśli próbuję nagrać, nie pojawia się we mnie, gdy wprowadzam cokolwiek na stronie.

To, co mam tak daleko (jest w Kotlin (nie Java)): enter image description here

I tu jest błąd, który zostanie wyświetlony: enter image description here

To uruchamia moją aplikację, wybierz przycisk logowania, otwiera stronę internetową, ale nie może uzyskać dostępu do elementów.

Próbowałem również:

enter image description here

Aktualizacja: To jest za pomocą Chrome niestandardowych zakładek (nie Web View) tak Espresso internetowa nie działa.

+0

proszę pisać twój kod jako zwykły tekst następnym razem, nie w postaci obrazów. –

Odpowiedz

1

udało mi się rozwiązać ten problem przy użyciu zarówno espresso i UI Automator. Jesteś w stanie połączyć oba.Wybór przycisku logowania użyłem Espresso (a reszta aplikacji, użyję Espresso). Aby obsłużyć kartę Chrome niestandardowy do logowania, użyłem UIAutomator:

enter image description here

+0

Dziękuję bardzo, bardzo. Nigdy bym nie pomyślał, że trzeba nacisnąć ten sam przycisk dwa razy. Jak to zrozumiałeś i dlaczego uważasz, że jest to konieczne? –

+0

Czy odnosisz się do przycisku logowania? Właściwie to kliknięcie najpierw nagłówka w nagłówku, a potem przycisku logowania, ale musiałem to zrobić, ponieważ musiałem odrzucić klawiaturę, która się pojawi. Klawiatura zakrywała przycisk logowania, więc najpierw kliknąłem element gdzieś na ekranie, aby odejść, a następnie mogłem uzyskać dostęp do przycisku logowania. Mam nadzieję, że pomaga! – rfodge

+0

Dzięki! Uświadomiłeś mi, że mam ten sam problem, ale zadziałało, ponieważ mój selektor nie był wystarczająco szczegółowy i kliknął coś innego niż myślałem. Teraz mogę użyć innego, bardziej oczywistego selektora. –

2

Aktualizacja:

Nie można używać Espresso do testowania niestandardowych kart Chrome. Espresso działa podczas testowania własnej aplikacji.

Do testowania kart Chrome można użyć UI Automator, ale prawdopodobnie nie chcesz tego robić.

1) Sprawdź, czy adres URL jest poprawny rusza

Test jednostka byłaby wystarczająco tutaj. Musisz tylko upewnić się, że adres URL przekazany do biblioteki niestandardowych zakładek Chrome jest prawidłowy. Upewnisz się, że Twój kod działa poprawnie. To, co dzieje się dalej, jest obsługiwane przez bibliotekę i testy tam należą.

2) dostęp do elementów na stronie internetowej tak, że mogę wprowadzić informacje logowania i nadal zalogować

Tu testują prostą stronę internetową. Dlaczego chcesz dodatkowy nakład na uruchomienie emulatora? Być może Selenium lub cokolwiek jest fajne dla sieci będzie działać tutaj (nie jest to program WWW)?

Można użyć Espresso Web

Oto przykład testu:

@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

Co to jest withWebFormIntent()? Ponadto mam już uruchomioną aplikację za pomocą LaunchActivity, a następnie wybieram przycisk logowania i wtedy chcę, aby używał widoku internetowego. – rfodge

+0

Jeśli spróbuję uruchomić go z włączoną obsługą JS (w trybie przesłonięcia funkcji AfterActivityLaunched), otrzymuję: android.support.test.espresso.NoMatchingViewException: Brak zgodnych widoków w hierarchii: WebView z włączonym JS – rfodge

+0

Zaktualizowane pytanie z dodatkowymi informacjami na temat tego, co Obecnie mam – rfodge

Powiązane problemy