为了使 appium 支持 Android 系统 7 及以上,automationName 使用了 UIAutomator2。但是发现,使用 androidDriver.pressKeyCode(AndroidKeyCode.ENTER) 方法时,页面没有回车搜索,没有达到预期模拟键盘中回车的效果,查看 server 日志也没有报错信息。如果将 automationName 改为 Appium 则正常。
百思不得其解,希望各位可以指点迷津。
appium server : v1.7.2
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>5.0.4</version>
</dependency>
appium 部分初始化属性值如下:
serverURL=http://127.0.0.1:4723/wd/hub
automationName=UIAutomator2
platformName=Android
platformVersion=5.1.1
deviceName=vivo X6SPlus D
keyboardSearchr 方法如下:
/* 模拟点击键盘回车 */
public void keyboardSearch() {
AndroidDriver androidDriver = convertAndroidDriver();
if (androidDriver != null) {
androidDriver.pressKeyCode(AndroidKeyCode.ENTER);
}
}
appium server 日志如下:
[2018-03-13 06:48:03][HTTP] <-- POST /wd/hub/session/32430c80-b93a-4ce9-897b-adf882a2296e/element/161af97a-b351-4c8b-a3e5-be4dfc7ae386/value 200 57 ms - 74
[2018-03-13 06:48:03][HTTP] --> POST /wd/hub/session/32430c80-b93a-4ce9-897b-adf882a2296e/appium/device/press_keycode {"keycode":66}
[2018-03-13 06:48:03][MJSONWP] Calling AppiumDriver.pressKeyCode() with args: [66,null,null,null,"32430c80-b93a-4ce9-897b-adf882a2296e"]
[2018-03-13 06:48:03][JSONWP Proxy] Proxying [POST /appium/device/press_keycode] to [POST http://localhost:8206/wd/hub/session/9464ba9e-8b73-46c6-81db-91299359c318/appium/device/press_keycode] with body: {"keycode":66,"metastate":null}
[2018-03-13 06:48:04][JSONWP Proxy] Got response with status 200: {"sessionId":"9464ba9e-8b73-46c6-81db-91299359c318","status":0,"value":true}
[2018-03-13 06:48:04][MJSONWP] Responding to client with driver.pressKeyCode() result: true
[2018-03-13 06:48:04][HTTP] <-- POST /wd/hub/session/32430c80-b93a-4ce9-897b-adf882a2296e/appium/device/press_keycode 200 626 ms - 76
[2018-03-13 06:49:04][BaseDriver] Shutting down because we waited 60 seconds for a command
[2018-03-13 06:49:04][UiAutomator2] Deleting UiAutomator2 session
最终解决方法:
使用 UIA2
过程中,在进行 input 操作时,不知道什么原因,焦点不在输入框上,导致 pressKeyCode()
方法无效。(怀疑是 UIA2
框架的小 bug)
可在调用pressKeyCode()
方法时,先重新 click 一下 input 输入框,然后执行 pressKeyCode()
方法即可。
在 input 和 click 操作之后,不需要调用第三方输入法,继续使用 io.appium.android.ime/.UnicodeIME
即可。