今天完成了对真机上的 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,运行此代码,运行成功后 “王阳” 打在了指定的输入框 如图:


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