2014-02-18 5 views
8

Ich habe eine FrageAndroid Espresso - Webbrowser

Ich möchte testen, ob nach dem Klick auf den Web-Browser wird Bier mit Espresso gestartet. Und die Frage ist: Ist es überhaupt möglich, so etwas zu testen? Wenn ja irgendwelche Ideen wie würde ich das tun?

Antwort

3

Eigentlich nein. Espresso ermöglicht es Ihnen, auf die Schaltfläche zu klicken und sobald der Browser gestartet ist, wird der Test beendet. Die Alternative, die Sie haben, ist Ihre Klasse, die den Browser absichtlich verspottet, damit Sie den verbleibenden Fluss (falls vorhanden) testen können.

Werfen Sie einen Blick auf diese Antwort: Controlling when an automation test ends - Espresso, wo ich beschreiben, wie Sie das erreichen konnten.

+0

Siehe Wahibs Antwort unten. – Jamey

18

Obwohl es eine alte Frage ist, aber nur hier zu posten, um anderen zu helfen. Ich hatte die gleiche Situation, in der ich überprüfen wollte, ob eine bestimmte URL im Browser gestartet wurde oder nicht. Ich habe echte Hilfe dieser link

Ich habe es mit diesem Stück Code arbeiten:

Intents.init(); 
    Matcher<Intent> expectedIntent = allOf(hasAction(Intent.ACTION_VIEW), hasData(EXPECTED_URL)); 
    intending(expectedIntent).respondWith(new Instrumentation.ActivityResult(0, null)); 
    onView(withId(R.id.someid)).perform(click()); 
    intended(expectedIntent); 
    Intents.release(); 

So testet es, wenn Browser mit der richtigen URL geöffnet und intending() macht die Magie hier durch Vorsatz Anstoßen ermöglicht. Dadurch können wir es abfangen, sodass die Absicht niemals an das System gesendet wird.

+2

funktioniert wie Charme –

+0

@FalcoWinkler gut zu wissen, dass. Es wäre nett, wenn Sie es auch als Antwort akzeptieren können :) –

+0

Ich habe die Frage nicht gestellt –

0

Der Einfachheit halber schlage ich ein vollständiges Beispiel:


Produktionscode:

register_terms.text = Html.fromHtml(getString(R.string.register_terms, 
     getString(R.string.privacy_policy_url), 
     getString(R.string.register_terms_privacy_policy), 
     getString(R.string.general_terms_and_conditions_url), 
     getString(R.string.register_terms_general_terms_and_conditions))) 

Strings XML:

<string name="register_terms">By registering you accept our &lt;a href=\"%1$s\">%2$s&lt;/a&gt; and the &lt;a href=\"%3$s\">%4$s&lt;/a&gt;.</string> 
<string name="register_terms_privacy_policy">Privacy Policy</string> 
<string name="register_terms_general_terms_and_conditions">General Terms and Conditions</string> 

<string name="privacy_policy_url" translatable="false">https://www.privacypolicy.com</string> 
<string name="general_terms_and_conditions_url" translatable="false">https://www.generraltermsandconditions.com</string> 

Testcode:

@Before 
fun setUp() { 
    Intents.init() 
} 

@After 
fun tearDown() { 
    Intents.release() 
} 

@Test 
fun when_clickPrivacyLink_then_openPrivacyUrl() { 
    val expected = allOf(IntentMatchers.hasAction(Intent.ACTION_VIEW), IntentMatchers.hasData(string(privacy_policy_url))) 
    Intents.intending(expected).respondWith(Instrumentation.ActivityResult(0, null)) 

    onView(ViewMatchers.withId(R.id.register_terms)) 
      .perform(openLinkWithText(string(register_terms_privacy_policy))) 

    Intents.intended(expected) 
}