Appium 个人分享-混合框架【WebView 的中文输入问题】

bxc518 · 2014年08月13日 · 最后由 bxc518 回复于 2014年08月13日 · 1164 次阅读

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

后来发现 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 {
        // 释放变量
    }
}
共收到 3 条回复 时间 点赞

这其实是一个不错的方法~

@bxc168 其实论坛里早就有文章说明这一点了,多搜索搜索,可以少走很多弯路。http://testerhome.com/topics/419

#2 楼 @luis 是的,你那个帖子之前确实没看太懂,后来顿悟了,原来就是这个问题

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册