Appium 使用 Utf7ime 输入法实现中文输入 Windows+Java 平台(完整步骤版)

Mr Wang · 2014年04月10日 · 最后由 nonono 回复于 2016年02月04日 · 1913 次阅读
本帖已被设为精华帖!

今天完成了对真机上的 APP 输入框的中文输入的操作,也研究了很久,很不易,特贴出来分享给广大才接触 appium 的 tester 希望对你们有帮助,不过我这个帖子是基于 Windows+Java 平台,其他平台恕我无能为力,也没精力去研究了。

一、打包输入法生成 apk 文件:
1,去 utf7ime 的 github 上把整个项目给下载下来,地址:https://github.com/sumio/uiautomator-unicode-input-helper
点击"Download ZIP"按钮进行 打包下载,如图:

2,下载完成 以后解压到本地磁盘的任意位置比如 C:\uiautomator-unicode-input-helper-master
3,打开 Eclipse(安装了 adt,并且配置好 sdk home in eclispe 不然不能打包)
4,点击 File->Import ->Existing Android Code Into Workspace->Next->点击 Browser 选择刚才解压后的文件夹中的 Utf7Ime 文件夹->点击 Done 完成导入操作
5,将改项目中的 project.properties 重新命名成:default.properties
6,选中该项目,点击菜单栏上的 project->clean..剩下的设置如图:

7,Build 完成以后,选中该项目进行打包生成 apk 文件,右键->Android Tools->Export Signed Application Package...具体打包详情可以参考:http://blog.csdn.net/luoyin22/article/details/7862742
8,把刚才打包的 apk 装入真机(我的是安卓 4.2.2)
9,在设置里面将本机的默认输入法设置成:UTF7 IME for UI Testing

二、导入 Utf7ImeHelper.java 和相关类到自己的 appium 工程
1,将 C:\uiautomator-unicode-input-helper-master\helper-library 文件夹下的所有的 java 文件都放入自己的 appium 项目目录 src 下 如图所示:

2,selenium 类库要添加到工程中

三、修改 AndroidContactsTest.java 中输入方法,主要在下面这段代码体现 UTF7IME 输入法的用途

textFieldsList.get(0).sendKeys(Utf7ImeHelper.e("王 阳"));

用 Utf7ImeHelper 去输入汉字。
参考代码:

package com.incito.appiumdemo;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.HasTouchScreen;
import org.openqa.selenium.interactions.TouchScreen;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteTouchScreen;
import org.openqa.selenium.remote.RemoteWebDriver;
import com.incito.inputhelp.Utf7ImeHelper;
import java.io.File;
import java.net.URL;
import java.util.List;
public class AndroidContactsTest {
    private WebDriver driver;

    @Before
    public void setUp() throws Exception {
        // set up appium
        File classpathRoot = new File(System.getProperty("user.dir"));
        File appDir = new File(classpathRoot, "apps");
        File app = new File(appDir, "ContactManager.apk");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("device","Android");
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
        capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
        capabilities.setCapability(CapabilityType.PLATFORM, "WINDOWS");
        capabilities.setCapability("app", app.getAbsolutePath());
        capabilities.setCapability("app-package", "com.example.android.contactmanager");
        capabilities.setCapability("app-activity", ".ContactManager");
        driver = new SwipeableWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }

    @After
    public void tearDown() throws Exception {
        driver.quit();
    }

    @Test
    public void addContact(){
        WebElement el = driver.findElement(By.name("Add Contact"));
        el.click();
        List<WebElement> textFieldsList = driver.findElements(By.tagName("textfield"));
     //主要在这里体现UTF7IME输入法的用途
       textFieldsList.get(0).sendKeys(Utf7ImeHelper.e("王 阳"));

        textFieldsList.get(1).sendKeys("18872573204");
        textFieldsList.get(2).sendKeys("stephenwang@gmail.com");
        driver.findElement(By.name("Save")).click();
    }

    public class SwipeableWebDriver extends RemoteWebDriver implements HasTouchScreen {
        private RemoteTouchScreen touch;

        public SwipeableWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {
            super(remoteAddress, desiredCapabilities);
            touch = new RemoteTouchScreen(getExecuteMethod());
        }

        public TouchScreen getTouch() {
            return touch;
        }
    }
}

四、运行查看结果:
1,启动 appium 服务
2,连接真机并启用调试模式
3,运行此代码,运行成功后 “王阳” 打在了指定的输入框 如图:

共收到 19 条回复 时间 点赞

其中 的 二、导入 Utf7ImeHelper.java 和相关类到自己的 appium 工程 中可以完全把 这些 java 类 打包成 jar 包 然后使用

@young 太赞了,请问你能录个视频不?

#2 楼 @lihuazhang 所有过程?

#3 楼 @young 对啊。要做就做精品

赞, 非常细致的整理.

视频就不做了吧 大家有问题留言

#7 楼 @young hi,我使用这个方式,输出来的是一串数字...怎么办

我使用这个方式输出来的是乱码。。。。。

WebElement editText = driver.findElementByClassName("android.widget.EditText");
editText.sendKeys(Utf7ImeHelper.e("自动化测试")); 楼主。。是乱码。。。。。

直接 sendKeys("中文") 就可以了,不要问我为什么,我是意外试出来的

#11 楼 @nailgogogogo 可能是最新版本的原因吧 好久没研究了

@nailgogogogo 什么版本的可以直接输入中文? Android 的

按此方法,我在手机运行输入中文时提示 UTF7 IME FOR UI TESTING 停止运行,可有解释
LG NEXUS4

谢谢,学习了。
要是 python 能用就好了。

我也来感谢大神们的无私付出了。

@young 我用此方法输出的也是一串数字 1111

@kingswei6 @bxc168 后来怎么解决了呀?

了解了,谢谢分享,可是用的是 Python 平台

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