我希望在一个Activity的onCreate()和onResume()方法被调用时测试键盘的可见性。
如何使用Espresso测试键盘是否显示?
我希望在一个Activity的onCreate()和onResume()方法被调用时测试键盘的可见性。
如何使用Espresso测试键盘是否显示?
我知道这个问题已经很老了,但是它还没有任何被接受的答案。 在我们的 UI 测试中,我们使用这个方法,它使用了一些 shell 命令:
/**
* This method works like a charm
*
* SAMPLE CMD OUTPUT:
* mShowRequested=true mShowExplicitlyRequested=true mShowForced=false mInputShown=true
*/
fun isKeyboardOpenedShellCheck(): Boolean {
val checkKeyboardCmd = "dumpsys input_method | grep mInputShown"
try {
return UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
.executeShellCommand(checkKeyboardCmd).contains("mInputShown=true")
} catch (e: IOException) {
throw RuntimeException("Keyboard check failed", e)
}
}
希望对某人有用
fun isKeyboardShown(): Boolean {
val inputMethodManager = InstrumentationRegistry.getInstrumentation().targetContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
return inputMethodManager.isAcceptingText
}
在Google groups上发现了相关的IT技术内容。
EditText
处于焦点状态,它始终返回false。 - Marvin Effing另一个技巧可能是检查一个视图的可见性,当键盘显示时,你知道它将被覆盖。不要忘记考虑动画...
使用Espresso和Hamcrest进行仪器测试,对于NOT匹配器,可以使用类似以下内容的语句:
//make sure keyboard is visible by clicking on an edit text component
ViewInteraction v = onView(withId(R.id.editText));
ViewInteraction v2 = onView(withId(R.id.componentVisibleBeforeKeyboardIsShown));
v2.check(matches(isDisplayed()));
v.perform(click());
//add a small delay because of the showing keyboard animation
SystemClock.sleep(500);
v2.check(matches(not(isDisplayed())));
hideKeyboardMethod();
//add a small delay because of the hiding keyboard animation
SystemClock.sleep(500);
v2.check(matches(isDisplayed()));
Espresso.closeSoftKeyboard()
。 - Code-Apprentice这对我很有效。
private boolean isSoftKeyboardShown() {
final InputMethodManager imm = (InputMethodManager) getActivityInstance()
.getSystemService(Context.INPUT_METHOD_SERVICE);
return imm.isAcceptingText();
}
@igork答案的Java版本。
view.rootWindowInsets.isVisible(WindowInsets.Type.ime())
waitUntil { }
API:@get:Rule val rule = createAndroidComposeRule<TestActivity>()
rule.waitUntil {
rule.activity.window.decorView.rootWindowInsets.isVisible(WindowInsets.Type.ime())
}
这个方法对我有效
val isKeyboardOpened: Boolean
get() {
for (window in InstrumentationRegistry.getInstrumentation().uiAutomation.windows) {
if (window.type == AccessibilityWindowInfo.TYPE_INPUT_METHOD) {
return true
}
}
return false
}
fun checkIsKeyboardDisplayed(expectedIsDisplayed: Boolean) {
val actualIsDisplayed: Boolean
val checkKeyboardCmd = "dumpsys input_method | grep mInputShown"
try {
actualIsDisplayed = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
.executeShellCommand(checkKeyboardCmd).contains("mInputShown=true")
} catch (e: IOException) {
throw RuntimeException("Keyboard check failed", e)
}
Assert.assertTrue(actualIsDisplayed == expectedIsDisplayed)
}`enter code here`
UiDevice
是什么?它来自哪个库? - Jeff Padgett