直接上主题,为了这个问题,我困惑了很久。

后来发现 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 {
        // 释放变量
    }
}


↙↙↙阅读原文可查看相关链接,并与作者交流