使用 appium 实现 Android 应用自动化。无法单击手机键盘上显示的“完成”按钮。有人可以帮助我们有什么方法可以使用 ADB Shell 命令单击 Android 手机完成按钮吗?
在 Android 中,您无法直接单击键盘按键,除非您使用 Appium 坐标执行单击/点击操作,但这并不总是可靠的。但是您可以使用 Appium 在 Android 上模拟硬件按键。
要按下(模拟)“完成”按钮,请使用以下代码:
driver.pressKey(new KeyEvent(AndroidKey.ENTER));
作为间接解决方案,我使用 key_event TAB (61) 将焦点切换到操作按钮,然后发送 key_event ENTER (66)
adb shell input keyevent 61
然后:
adb shell input keyevent 66
看起来没有建设性的方法来单击设备键盘上的“完成”或“下一步”按钮。因此,作为临时解决方案,我用 2 个手指点击“完成”按钮坐标,但这不是一个可行的解决方案。将等到 appium 在下一个版本中修复此问题。
在我的 Pixel 3 上,我通过以下命令使用 adb 自动点击“搜索/下一步/完成”按钮:
adb shell input tap 1070 1940
x,y 坐标将根据您的设备而有所不同。为了大致了解从哪里开始,您可以使用 adb 确定屏幕尺寸,然后从右下角向内和向上移动。因此,在我的 Pixel 3 上,我使用这个 adb 命令来确定窗口大小:
adb shell wm size
这给了我这个输出:“物理尺寸:1080x2160”。我从右侧移动 10 个像素,从底部向上移动 180 个像素,以获得适合我的“1070 1940”x,y 坐标。
现在我可以在文本字段中输入搜索字符串并模拟点击软键盘上的搜索键,如下所示:
adb shell input text searchterm && adb shell input tap 1070 1940
这都是必要的,因为我使用的搜索框是一个带有此 XML 属性的 Android EditText,以指示标准 Enter 键应替换为搜索图标:
android:imeOptions="actionSearch"
如果不是这种情况,我相信我可以发送 Enter 键的标准 KeyEvent:
adb shell input keyevent 66
启用 IME 搜索选项后,我相信您必须发送 KeyEvent.KEYCODE_ENTER (即 66)以及 FLAG_EDITOR_ACTION (其掩码值为 16),但 adb shell 输入似乎不支持添加标志.
我尝试发送 KEYCODE_SEARCH(即 84),该值自版本 1 以来一直存在于 Android API 中,但这不适用于我正在测试的应用程序。不知道为什么。
在 Android 键盘上可以使用下一个命令有效隐藏:
((AndroidDriver) appiumDriver).pressKey(new KeyEvent(AndroidKey.BACK));
如果焦点位于输入字段,则使用 ENTER 键可能会导致问题。那么键盘就不会被隐藏,并且会执行回车。
使用Appium方法:
((AndroidDriver) appiumDriver).hideKeyboard();
如果键盘必须从弹出窗口或 BottomSheet 对话框中隐藏,也会导致问题。然后对话框也将关闭。
此外,现在已弃用使用
unicodeKeyboard
功能。