Appium hidekeyboard()方法

问题描述 投票:4回答:5

我正在尝试自动化一个zipcode输入字段,弹出一个num键盘供用户输入。 Appium可以正确输入邮政编码,但在折叠键盘时遇到问题,我注意到有appium menthod driver.hidekeyboard()

但不幸的是,当我使用它时会出错。

Webdriver错误:

org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: [object Object]

Appium服务器日志;

debug] [JSONWP Proxy] Matched '/element/undefined/click' to command name 'click'
[debug] [JSONWP Proxy] Proxying [POST /element/undefined/click] to [POST http://localhost:8100/session/83293E4F-4B7A-462A-B5B1-1D729D54E36B/element/undefined/click] with body: {}
[debug] [XCUITest] Connection to WDA timed out
[debug] [iProxy] recv failed: Operation not permitted
[debug] [JSONWP Proxy] Got response with status 200: {"value":{},"sessionId":"83293E4F-4B7A-462A-B5B1-1D729D54E36B","status":13}
[JSONWP Proxy] Got an unexpected response: {"value":{},"sessionId":"83293E4F-4B7A-462A-B5B1-1D729D54E36B","status":13}
[debug] [MJSONWP] Matched JSONWP error code 13 to UnknownError
[debug] [XCUITest] Connection to WDA timed out
[debug] [iProxy] recv failed: Operation not permitted
[debug] [W3C (bac0efb8)] Encountered internal error running command: UnknownError: An unknown server-side error occurred while processing the command. Original error: [object Object]
[debug] [W3C (bac0efb8)]     at errorFromMJSONWPStatusCode (/usr/local/lib/node_modules/appium/node_modules/[email protected]@appium-base-driver/lib/protocol/errors.js:789:10)
[debug] [W3C (bac0efb8)]     at ProxyRequestError.getActualError (/usr/local/lib/node_modules/appium/node_modules/[email protected]@appium-base-driver/lib/protocol/errors.js:683:14)
[debug] [W3C (bac0efb8)]     at JWProxy.command (/usr/local/lib/node_modules/appium/node_modules/[email protected]@appium-base-driver/lib/jsonwp-proxy/proxy.js:234:19)
[HTTP] <-- POST /wd/hub/session/bac0efb8-601a-4558-a50c-f909f2ccb25a/appium/device/hide_keyboard 500 1

我还注意到键盘的覆盖方法有参数:https://github.com/appium/java-client/blob/1991a8a0f9e4a3ff467dbb713cb5c51c8edc060f/src/main/java/io/appium/java_client/HidesKeyboardWithKeyName.java

driver.hideKeyboard(HideKeyboardStrategy.PRESS_KEY, "Done");

但无论我是否导入了必要的类,它仍然说'HidesKeyboard类型中的方法hideKeyboard()不适用于参数(String,String)'

任何人都可以帮助解决上述两个问题?

非常感谢!

appium appium-ios
5个回答
1
投票

已知Appium方法hideKeyboard()在iPhone设备上使用时会不稳定,如Appium目前已知的开放性问题中所列。对iOS设备使用此方法可能会导致Appium脚本挂起。 Appium发现问题是因为 - “没有用于隐藏键盘的自动钩子,...而不是使用这种方法,想想用户如何在你的应用程序中隐藏键盘,并告诉Appium这样做(滑动,点击某个坐标等...)“

解决方法:遵循Appium文档的建议 - 使用Appium自动执行用户用来隐藏键盘的操作。例如,如果应用程序定义此操作,则使用滑动方法隐藏键盘,或者如果应用程序定义“hide-KB”按钮,则自动单击此按钮。

另一种解决方法是使用sendkey()而不单击文本输入字段。


0
投票

已知Appium方法hideKeyboard()在iPhone设备上使用时会不稳定,如Appium目前已知的开放性问题中所列。对iOS设备使用此方法可能会导致Appium脚本挂起。 Appium发现问题是因为 - “没有用于隐藏键盘的自动钩子,...而不是使用这种方法,想想用户如何在你的应用程序中隐藏键盘,并告诉Appium这样做(滑动,点击某个坐标等。

如果要隐藏键盘,可以编写如下所示的功能

public void typeAndEnter(MobileElement mobileElement, String keyword) {
        LOGGER.info(String.format("Typing %s ...",keyword));
        mobileElement.sendKeys(keyword, Keys.ENTER);
    }

希望这可以帮助


0
投票

你也可以简单地使用

driver.navigate()背面(); (对于较旧版本的appium)


0
投票

问题是试图在第一个地方隐藏键盘。将DesiredCapabilities设置为

cap.setCapability("connectHardwareKeyboard", false);

这将默认隐藏键盘。

通过sendKeys()输入数据的操作

appDriver.findElementByXPath("//XCUIElementTypeOther[@name=\"Confirm password\"]/XCUIElementTypeSecureTextField").sendKeys(confirmPassword);

一旦完成电话

appDriver.hideKeyboard();

键盘消失了。希望这可以帮助


0
投票

您可以定义这样的功能。

desiredCapabilities.setCapability("unicodeKeyboard", true);
desiredCapabilities.setCapability("resetKeyboard", true);
© www.soinside.com 2019 - 2024. All rights reserved.