2016-06-15 13 views
2

Welcher ist der richtige Mechanismus für den Umgang mit Interstitial Ad während der Espressotests?Wie wird die Interstitial-Anzeige während der Espressotests gehandhabt (geschlossen)?

Es gibt Interstitial Ad zwischen zwei Aktivitäten und ich möchte einen Espresso Test schreiben, der beide Aktivitäten umfasst.

Gibt es eine Möglichkeit, die Interstitial Ad während des Espresso-Tests zu schließen, um die zweite Aktivität fortzusetzen?

Kann es mit Espresso-Intents gemacht werden?

ODER

ist die Mischung von UIAutomator Tests und Espresso ist die einzige Lösung für dieses Problem?

enter image description here

+0

Haben Sie Glück dabei? Ich stecke auch hier fest. – Matej

+0

Ich denke, es gibt keine direkte Möglichkeit, Espresso-Tests mit der Bibliothek UI (in diesem Fall google admob) zwischen Aktivitäten zu laufen .. In meinem Fall war es kostenlos und bezahlte Geschmack Sache .. Ich verwendete Ad in "free" Geschmack zwischen zwei Aktivitäten und nicht in "bezahlt" man .. so im Fall von Free Flavor, habe ich getestet, ob UI-Elemente auf dem nächsten Bildschirm sichtbar sind, wenn ich auf ein Element im ersten Bildschirm klicken, die Benutzer auf den zweiten Bildschirm..If Sie sind sichtbar, dann sollte der Test fehlschlagen und umgekehrt Tests für den Fall der "kostenpflichtigen Version". Macht es Sinn? Irgendwelche Vorschläge, um das zu verbessern? – Droidwala

+1

Vielleicht können Sie den UI-Automator verwenden und die System-Zurück-Taste dazu drücken und das Interstitial auf diese Weise schließen. Wie auch immer, ich gab auf, da ich auf Zeit bedacht war und Espresso ironischerweise für mich flockiger war als Robotium, also benutzte ich das mit ein bisschen gewohnter Wartelogik, und es funktionierte sofort. – Matej

Antwort

0

Fügen Sie diese Bibliothek zu Ihrem gradle:

androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3' 

Dann in Ihrem Espresso-Test nach der Anzeige dargestellt:

Thread.sleep(5000); // Necessary time you needed to show your ads, for example 5 seconds 

// After that, press back button to go back 
UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 
     mDevice.pressBack(); 

Wenn Ihre App auf SDK Ebene läuft unter 18 Erstellen Sie eine weitere AndroidManifest.xml-Datei in Ihrem Testverzeichnis src/androidTest/ mit diesem Code, damit Ihre Tests mit minSdkVersion=18 ausgeführt werden (Das ist der API-Ebene für UIAutomator erforderlich):

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    package="com.monkingme.monkingme" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 

    <uses-sdk 
     android:minSdkVersion="18" 
     tools:overrideLibrary="android.support.test.uiautomator.v18" /> 
</manifest> 
0

ich auch das Problem hatte erst vor kurzem, so habe ich nur den Espresso-Test Recorder meiner Nähe Anzeige aufnehmen, um zu sehen, was der Test Aufzeichnung der Fall ist, verwendet es nur die folgenden:

ViewInteraction imageButton = onView(
      allOf(withContentDescription("Interstitial close button"), isDisplayed())); 
    imageButton.perform(click()); 

Werke für jetzt, aber ich weiß nicht, ob dies für die zukünftige AdMob libs funktionieren würde und wird sicherlich nicht funktionieren, nachdem sie den Inhalt Beschreibung ändern.

Für die Zukunft, ich bin mit Version 11.0.4 Anzeigen Bibliothek:

freeCompile 'com.google.android.gms:play-services-ads:11.0.4' 
0

Was ist der richtige Mechanismus ist mit Interstitial Ad während Espresso-Tests umgehen?

Es gibt Interstitial Ad zwischen zwei Aktivitäten und ich möchte einen Espresso Test schreiben, der beide Aktivitäten umfasst.

Gibt es eine Möglichkeit, die Interstitial Ad während des Espresso-Tests zu schließen, um die zweite Aktivität fortzusetzen?

IMO, die richtige Lösung ist, Ihre Tests einzurichten, so dass sie nicht mehrere Aktivitäten umfassen müssen.

Tests sollten konzentriert und isoliert werden. Sie müssen Aktivitäten nicht aufspannen, um das Verhalten zu bestätigen, da am Übergangspunkt eine logische Trennung vorhanden ist.Anstatt also einen Test zu schreiben, der besagt, dass "das Tun von x in Aktivität A die Aktivität B im Zustand y öffnet und z in Aktivität B das tun soll", schreiben Sie mehrere Tests:

1) "doing x in Aktivität A sollte eine Absicht zum Öffnen von Aktivität B starten "(Sie interessieren sich nicht für den Status der Benutzeroberfläche oder Ihre Anzeige), die Sie einfach mit der Intents-API überprüfen können.

2) "Starten von Aktivität B mit einem bestimmten Intent (was Sie von dem Übergang von A nach B erwarten) sollte es initialisieren, um y zu setzen", das Sie leicht einrichten können, indem Sie einen Intent an Ihre Aktivitätsregel übergeben und Verwenden von Matchern auf der Benutzeroberfläche.

3) "Ausführen von z in Aktivität B, wenn mit Status y gestartet wird, sollte dies oder das tun", was Sie leicht überprüfen können, indem Sie die Aktivität wie in (2) starten.

Hoffe, dass hilft.