直接上主题,为了这个问题,我困惑了很久。
后来发现 Selendroid 模式支持 js 脚本,所以这个中文输入也就完美解决了。
// 支持中文输入
// 支付4.1~4.4的WEBVIEW中文输入
public void my_sendKeys(AppiumDriver driver, WebElement inputField,
String text) throws Exception { //
try {
// 跳过引导页
logger.info("----------开始输入----------");
// 支持 4.1~4.3 的模式 ,调用 ADB直接滑动
if (autoName.equals("Selendroid")) {
/*
* appium不支持中文输入 参考了robotium的以js方式为元素直接设置value的做法
* 利用Selenium中Webdriver执行js方法实现中文输入
*/
JavascriptExecutor jse = (JavascriptExecutor) driver;
String id_type = inputField.getAttribute("id");
System.out.println(inputField.getTagName());
if (!id_type.isEmpty()) {
// 这样判断后,所有空白都会被赋值
if (inputField.getTagName().equals("INPUT")) {
jse.executeScript("var inps = document.getElementsByTagName('input'); for(var i = 0,inp; inp = inps[i++];){ if(inp.id == '"
+ id_type
+ "'){ if(inp.style.display!=\"none\"){inp.value ='"
+ text + "'}}}");
}
if (inputField.getTagName().equals("TEXTAREA")) {
jse.executeScript("var inps = document.getElementsByTagName('textarea'); for(var i = 0,inp; inp = inps[i++];){ if(inp.id == '"
+ id_type
+ "'){ if(inp.style.display!=\"none\"){inp.value ='"
+ text + "'}}}");
}
} else {
// 这样判断后,所有空白都会被赋值
if (inputField.getTagName().equals("INPUT")) {
jse.executeScript("var inps = document.getElementsByTagName('input'); for(var i = 0,inp; inp = inps[i++];){if(inp.style.display!=\"none\"){inp.value ='"
+ text + "'}}");
}
if (inputField.getTagName().equals("TEXTAREA")) {
jse.executeScript("var inps = document.getElementsByTagName('textarea'); for(var i = 0,inp; inp = inps[i++];){if(inp.style.display!=\"none\"){inp.value ='"
+ text + "'}}");
}
}
} else {
inputField.sendKeys(text);
}
logger.info("----------开始输入 ok----------");
} catch (Exception ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
throw ex;
} finally {
// 释放变量
}
}