android – 在UiAutomator测试中检测或抑制键盘

在我的UI测试中,我在屏幕顶部附近设置了两个UiObjects的文本,然后单击位于屏幕底部附近的第三个UiObject.在某些设备上(例如我的Nexus 6运行5.0),这非常有效.设置文本后,屏幕底部的UiObject仍然可见,并且已成功单击.

在其他设备上(例如我的运行4.4的Nexus 4),在UiObjects上调用setText会调出软键盘,这会遮挡屏幕底部附近的第三个UiObject并阻止它被点击.

我考虑使用UiDevice.pressBack()来关闭键盘,但问题是键盘显示在某些设备而不是其他设备上.按下不显示键盘的设备会导致导致测试失败的其他行为.

我还考虑过使用UiDevice.pressEnter()作为解决方案.我认为如果它是可见的,它会解雇键盘,如果不是,那就什么都不做(两全其美).问题是,UiAutomator在运行测试时显示的键盘没有“进入”按钮,它有一个“下一步”按钮.这与我在代码中设置实际UI元素的方式相反.当我手动测试时,键盘会按预期显示“输入”按钮.但是,由于UiAutomator正在看“下一个”按钮,这就是它正在执行的功能.焦点只是传递给下一个UiObject,键盘仍然可见.

所以我想要做的就是在可见的情况下解除键盘,如果没有,则不用按下后退按钮.有没有办法确定它是否显示?或者更好的是,从来没有首先展示它?

最佳答案 不同的设备有不同的包,键盘功能也可能不同.

所以,细节可能不完全相同.

以下列出的步骤在我的设备上的Android 4.0中成功:

>禁用相对于键盘输入法的包.

这些命令列在这里:

adb root
adb shell pm disable com.google.android.apps.inputmethod.hindi
adb shell pm disable com.google.android.inputmethod.korean
adb shell pm disable com.google.android.inputmethod.pinyin
adb shell pm disable com.google.android.inputmethod.latin
adb shell pm disable jp.co.omronsoft.iwnnime.ml
pause

注意:设备中可能不存在某些包名称“com.google.android.inputmethod.pinyin”.
使用此命令检查:

adb shell pm list packages inputmethod

>停用“Google语音输入”

“谷歌语音输入”仍然可以弹出键盘.

如果要禁用键盘:

转到设置→应用→运行(或全部)→“Google键盘”→设置→禁用“Google语音输入”.

注意:如果要启用键盘,请运行如下命令:

adb shell pm enable com.google.android.inputmethod.latin
点赞