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

时间:2015-02-04 00:40:38

标签: android uiautomator

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

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

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

我还考虑使用UiDevice.pressEnter()作为解决方案。我认为如果它是可见的,它会解雇键盘,如果它不是(两个世界中最好的),它什么也不做。问题是,UiAutomator在运行我的测试时显示的键盘没有"输入"按钮,它有一个" next"按钮。这与我在代码中设置实际UI元素的方式相反。当我手动测试时,键盘显示"输入"按钮按预期。但是,因为UiAutomator正在看到" next"按钮,这是它正在执行的功能。焦点只是传递给下一个UiObject,键盘仍然可见。

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

3 个答案:

答案 0 :(得分:2)

不同的设备有不同的包装,键盘功能也可能不同 所以,细节可能不尽相同。

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

  1. 相对于键盘输入法禁用包。

    这里列出了命令:

    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
    
  2. 停用“Google语音输入”

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

    如果要禁用键盘:

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

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

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

答案 1 :(得分:0)

我想我找到了一种方法让测试通过,这就是简单地向下滚动屏幕。在我的情况下,UI是可滚动的,所以这是有效的。

UiScrollable layout = new UiScrollable(new UiSelector().resourceId(...));
layout.scrollForward(5);

我发布这个以防万一它可以帮助处于类似情况的任何人。它实际上并没有回答我的问题,所以我不接受这个。

答案 2 :(得分:0)

我想也许你可以试试这个:如果在该视图中找不到if(),那么在该步骤上写UiObject,然后UiDevice.pressBack()