在我的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