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