2015-11-23 22 views
6

Opracowuję swoją pierwszą aplikację na Androida i konfigurowałem serwer CI. Moje testy espresso działać dobrze na moim komputerze, ale Travis błędów out z następującymOdblokuj ekran emulatora za pomocą espresso

java.lang.RuntimeException: Czekaliśmy korzenia hierarchii widoku mieć okno ostrość i nie będzie zainteresowanie układ przez ponad 10 sekund.

Wygląda na to, że przed uruchomieniem testów muszę odblokować ekran emulatora. Aby to zrobić muszę dodać manifestu do src/debug z wymaganych uprawnień, a następnie odblokować ekran:

KeyguardManager mKeyGuardManager = (KeyguardManager) ctx.getSystemService(Context.KEYGUARD_SERVICE); 
KeyguardManager.KeyguardLock mLock = mKeyGuardManager.newKeyguardLock(name); 
mLock.disableKeyguard(); 

Chodzi o to, że nie chcą miotu moje działania z powyższym kodem owiniętego czy bloków. Czy istnieje sposób na odblokowanie ekranu z samego testu espresso?

Moje testy espresso:

@RunWith(AndroidJUnit4.class) 
public class EspressoSetupTest { 

    @Rule 
    public final ActivityTestRule<WelcomeActivity> activity = 
      new ActivityTestRule<>(WelcomeActivity.class, true, true); 

    @Test 
    public void launchTest() { 
     onView(withId(R.id.welcome_textView_hello)) 
       .perform(click()) 
       .check(matches(withText("RetroLambda is working"))); 
    } 
} 

Odpowiedz

5

Można użyć metody setUp() w teście espresso jak:

@UiThreadTest 
@Before 
public void setUp() throws Exception { 
    final Activity activity = mActivityRule.getActivity(); 
    mActivityRule.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      KeyguardManager mKG = (KeyguardManager) activity.getSystemService(Context.KEYGUARD_SERVICE); 
      KeyguardManager.KeyguardLock mLock = mKG.newKeyguardLock(KEYGUARD_SERVICE); 
      mLock.disableKeyguard(); 

     //turn the screen on 
     activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
        | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
        | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); 
      } 
     }); 
} 

src/debug/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" > 
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
</manifest> 
+0

I konfiguracja espresso jest inna. Nie mam dostępu do kontekstu i jak powinna utrzymywać się nazwa? –

+0

Edytowałem swoją odpowiedź, aby było bardziej zrozumiałe. Możesz użyć działania, aby uzyskać usługę systemową. Zmienna nazwa jest tylko znacznikiem, do tego celu można użyć statycznego ciągu znaków KEYGUARD_SERVICE. – woley

+0

Dzięki! Moja klasa testowa espresso naprawdę niczego nie podklaskuje. Dostaję instancję działania za pomocą ActivityTestRule.getActivity() i umieszczenie kodu w metodzie @Before setUp(), ale to nie zadziałało. –

Powiązane problemy