我正在尝试自动化一个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
driver.hideKeyboard(HideKeyboardStrategy.PRESS_KEY, "Done");
但无论我是否导入了必要的类,它仍然说'HidesKeyboard类型中的方法hideKeyboard()不适用于参数(String,String)'
任何人都可以帮助解决上述两个问题?
非常感谢!
已知Appium方法hideKeyboard()在iPhone设备上使用时会不稳定,如Appium目前已知的开放性问题中所列。对iOS设备使用此方法可能会导致Appium脚本挂起。 Appium发现问题是因为 - “没有用于隐藏键盘的自动钩子,...而不是使用这种方法,想想用户如何在你的应用程序中隐藏键盘,并告诉Appium这样做(滑动,点击某个坐标等...)“
解决方法:遵循Appium文档的建议 - 使用Appium自动执行用户用来隐藏键盘的操作。例如,如果应用程序定义此操作,则使用滑动方法隐藏键盘,或者如果应用程序定义“hide-KB”按钮,则自动单击此按钮。
另一种解决方法是使用sendkey()而不单击文本输入字段。
已知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);
}
希望这可以帮助
你也可以简单地使用
driver.navigate()背面(); (对于较旧版本的appium)
问题是试图在第一个地方隐藏键盘。将DesiredCapabilities设置为
cap.setCapability("connectHardwareKeyboard", false);
这将默认隐藏键盘。
通过sendKeys()输入数据的操作
appDriver.findElementByXPath("//XCUIElementTypeOther[@name=\"Confirm password\"]/XCUIElementTypeSecureTextField").sendKeys(confirmPassword);
一旦完成电话
appDriver.hideKeyboard();
键盘消失了。希望这可以帮助
您可以定义这样的功能。
desiredCapabilities.setCapability("unicodeKeyboard", true);
desiredCapabilities.setCapability("resetKeyboard", true);