3

У меня есть экран входа в систему, который содержит адрес электронной почты и пароль для ввода с кнопкой отправки внизу. В соответствии с требованием, когда включена мягкая клавиатура, я перемещаю кнопку отправки вверх , т. е. показ кнопки отправки пользователю над мягкой клавиатурой и ниже моей рассылки по электронной почте/паролю, используя приведенный ниже код.Android - Мягкая клавиатура, не появляющаяся во время теста Espresso

mainrel.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Rect r = new Rect(); 
      mainrel.getWindowVisibleDisplayFrame(r); 
      int heightDiff = mainrel.getRootView().getHeight() - (r.bottom - r.top); 
      if (heightDiff > 128 && heightDiff != 146) { 
       //KeyBoard Enabled 
       moveButtonTo_Top(); 
      } else { 
       //KeyBoard Disabled 
       moveButtonTo_Down(); 
      } 
     } 
    }); 
    //Floating down the button 
private void moveButtonTo_Down() { 
    RelativeLayout.LayoutParams relativeparams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    relativeparams.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    relativeparams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
    relativeparams.setMargins(0, 0, 0, Constants.NEXT_LAYOUT_MARGIN_TOP); 
    submitLay.setLayoutParams(relativeparams); 
} 

//Floating Up button 
private void moveButtonTo_Top() { 
    RelativeLayout.LayoutParams relativeparams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    relativeparams.addRule(RelativeLayout.BELOW, R.id.mainLinearlay); 
    relativeparams.setMargins(0, 20, 0, 0); 
    relativeparams.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    submitLay.setLayoutParams(relativeparams); 
} 

Каждая вещь работает отлично, пока работает моя application.But проблема во время тестирования пользовательского интерфейса эспрессо я не в состоянии увидеть softkeyboard для ввода значений в электронной EditText. Здесь я упомянул код кодов Espresso Ui.

общественный класс LoginActivityTest { @Rule public ActivityTestRule mActivityRule = new ActivityTestRule (LoginActivity.class);

@Test 
public void login() { 
    onView(withId(R.id.ripplebtn_step)).perform(click()); 
    Utils.sleep(3000); 
    //Sign In 
    onView(withId(R.id.edt_email)).perform(typeText(TestCaseConstants.CUSTOM_SIGNIN_USER_EMAIL)).perform(closeSoftKeyboard()); 
    onView(withId(R.id.edt_password)).perform(typeText(TestCaseConstants.CUSTOM_SIGNIN_PASSWORD)).perform(closeSoftKeyboard()); 
    onView(withId(R.id.txt_submit)).perform(click()); 
} 

*** Примечание: Если я комментарий глобального макета слушателя для моего макета т.е., mainrel в моей деятельности, то я могу выполнить тестовый случай. Я думаю, что есть проблемы с движением кнопок вверх и вниз, используя OnGlobalLayoutListener.

Может ли кто-нибудь предложить или помочь мне?

public class SampleTest { 
@Rule 
public IntentsTestRule<StepSignInActivity> mAddIntentsTestRule = 
     new IntentsTestRule<StepSignInActivity>(SignInActivity.class); 
IdlingResource idlingResource; 

@Before 
public void before() { 
    idlingResource = new ElapsedTimeIdlingResourc`enter code here`e(5000); 
    Espresso.registerIdlingResources(idlingResource); 
} 
@After 
public void after() { 
    Espresso.unregisterIdlingResources(idlingResource); 
} 

@Test 
public void runSequence() { 
    // this triggers our intent service, as we registered 
    // Espresso for it, Espresso wait for it to finish 
    onView(withId(R.id.edt_email)).perform(typeText(TestCaseConstants.CUSTOM_SIGNIN_USER_EMAIL)); 
    onView(withId(R.id.edt_password)).perform(typeText(TestCaseConstants.CUSTOM_SIGNIN_PASSWORD)).perform(closeSoftKeyboard()); 
    onView(withId(R.id.txt_submit)).perform(click()); 
} 
+0

Вы определили 'IntentTestRule'? –

+0

№ Не определено. – vaish

ответ

0

Попробуйте:

@Rule 
public IntentsTestRule<YourActivity> mAddIntentsTestRule = 
     new IntentsTestRule<>(YourActivity.class) 

@Before 
public void registerIdlingResource() { 
    Espresso.registerIdlingResources(
      mAddIntentsTestRule.getActivity().getCountingIdlingResource()); 
} 

/** 
* Unregister your Idling Resource so it can be garbage collected and does not leak any memory. 
*/ 
@After 
public void unregisterIdlingResource() { 
    Espresso.unregisterIdlingResources(
      mAddIntentsTestRule.getActivity().getCountingIdlingResource()); 
} 
+0

Не работал для меня. – vaish

+0

Можете ли вы поделиться классом, в котором вы написали тестовые примеры пользовательского интерфейса? –

+0

Можете ли вы увидеть мой класс SampleTest выше? – vaish

1

Существует настройка клавиатуры для отображения виртуальной клавиатуры даже при вводе текста выполняется с помощью аппаратной клавиатуры (что тесты делают вид использования). Он может быть установлен с помощью АБР

adb shell settings put secure show_ime_with_hard_keyboard 1 

или доступ в навигационной панели, когда курсор находится в текстовом поле:

Keyboard settings in navigation bar

Затем установите опцию «Показать виртуальную клавиатуру»:

Show virtual keyboard setting

Это должно показать клавиатуру в текстовом поле, но это будет автоматически закрывается, когда фокус покидает текстовое поле (что не подходит для реальных телефонов).