2017-08-08 10 views
3

画面にEditTextとスキップButtonが含まれているエスプレッソテストがあります。 アクティビティを起動すると、キーボードがポップアップし、EditTextにフォーカスし、Buttonと重複します。
スキップボタンのテストを作成し、その後に何が起こるのかをアサートする必要があります。エスプレッソはキーボードが開くのを待っていません

エスプレッソはキーボードが開くのを待たないという問題があります。
は、だから何が起こるかは

  • エスプレッソは、キーボードを待っていないで、「スキップ」
  • キーボードスライドプレスオープン
  • キーボードが

コードルックスを失敗したの下に何かのためのアサーションは今thatsのこのように:

public void givenSkipped_whenConfirmed_thenMainActivityLaunched() { 
    Espresso.closeSoftKeyboard();// <- Not working as espresso seems to think it is not open yet 
    skipPostcodeEntry.perform(click()); //<- Can click this as keyboard is not open yet. 

    warningText.check(matches(withText(R.string.some_text))); 

    confirmationButton.perform(click());//<- Fails as this is now overlapped by KB 

    Assert.DoesSomething() 
} 

エスプレッソはnot waiting for the keyboard to closeだったが、キーボードが開くのを待っていないという問題はなかった。

誰でもこの問題を解決しましたか?

編集

あなたがCloseKeyboardActionというクラスを見つけることができますcloseSoftKeyboard方法を調べます。キーボードが開いていると認識されない場合でもログが記録されることがわかります。

答えて

4

残念ながら現時点では、エスプレッソにはキーボードが画面に表示されているかどうかを確認できません。 (https://groups.google.com/forum/#!topic/android-platform/FyjybyM0wGA

回避策として、フォーカスが必要な入力フィールドを確認してから、キーボードを閉じます。これは、エスプレッソは

@Test 
public void testSomething() { 
    EspressoExtensions.closeKeyboardOnFocused(fieldThatShouldHaveFocus); 
    //Continue with normal test 
} 

は、次に、あなたのプロジェクトにEspressoExtensionsを追加... closeSoftKeyboardを()キーボードが画面に表示されている前に呼び出す防止:このことができます

public class EspressoExtensions { 
    /** 
    * This can be used to close the keyboard on an input field when Android opens the keyboard and 
    * selects the first input when launching a screen. 
    * <p> 
    * This is needed because at the moment Espresso does not wait for the keyboard to open 
    */ 
    public static void closeKeyboardOnFocused(ViewInteraction viewInteraction) { 
    viewInteraction.check(matches(hasFocus())).perform(closeSoftKeyboard()); 
    } 
} 

希望、エスプレッソかどうかを主張する方法を持ってまで、キーボードが画面上にあります

関連する問題