[android]uiautomator中文输入解决方案

UiAutomator不支持中文输入。 

通过设置中文输入法为默认,UiObject.setText("pinyin ") 的方式,可以实现中文输入,但是只能输入一些固定的词组。 

github上发现了一个 utf7ime 的好东西,可以实现中文输入,英文输入,中英文混合输入。简单来说,支持输入任何unicode编码的字符。 
原理是:UiObject.setText( String) 只能接受ASCII码,整个过程是输入的unicode编码的字符串decode成ASCIl码,setText接受这些ASCll码再通过utf7ime这个输入法encode成unicode编码的字符串输出。 
前置条件:手机装入此输入法并将之设为默认输入法 

简单说一说整个过程, 

打包下载 https://github.com/sumio/uiautomator-unicode-input-helper 
导入其中的Utf7Ime , 生成apk并安装设置成默认输入法 
把 helper-library 里面的Utf7ImeHelper.java导入自己的公用方法库,用于把字符串decode成ASCII码 
最后生成脚本是这样的:

import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
import com.sn.test.testUtil.AppAPI;
import com.sn.test.testUtil.Utf7ImeHelper;

public class TestInput extends UiAutomatorTestCase {
    private String caseName = this.getClass().getSimpleName();
    private String caseDetail = "";
    private String description = "";
    private boolean result = false;

    protected void setUp() throws Exception {
        super.setUp();
        AppAPI.setUp(caseName);
    }

    public void testDemo() throws UiObjectNotFoundException, RemoteException {

        new UiObject(new UiSelector().className("android.widget.TextView")
                .text("信息")).clickAndWaitForNewWindow();
        sleep(1000);

        new UiObject(new UiSelector().className("android.widget.RadioButton")
                .text("新信息")).clickAndWaitForNewWindow();
        sleep(1000);

        new UiObject(new UiSelector().className("android.widget.EditText"))
                .setText(Utf7ImeHelper.e("test test yingwen 中文一起输入"));
        sleep(1000);

下一步考虑如何将这个功能集成到脚本录制工具中去。 

文章转载于:http://testerhome.com/topics/408 
有空验证的同学,验证完后记得在博客上留言验证结果。

时间: 2024-10-18 13:45:04

[android]uiautomator中文输入解决方案的相关文章

有哪位大神知道为什么android的edittext输入中文输不进去

问题描述 有哪位大神知道为什么android的edittext输入中文输不进去 之前还可以的,不知道为什么今天edittext用中文输入的时候就是输不进去,求帮助 解决方案 首先最好还是先确认一下有无病毒,ctfmon.exe文件有无被病毒删除,有没有启动,再进行别的方法. 方法一: 右击任务栏空白处-工具栏-语言栏即可. 方法二: 首先打开文字服务 1. 单击开始,单击 控制面板,然后双击"区域和语言选项". 2. 在语言选项卡上的"文字服务和输入语言"下,单击详

Android adb “push pull”中文支持解决方案

Android adb "push pull"中文支持解决方案       在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的push和pull命令时就会导致由于编码方式的不同而产生的错误,解决这一问题就只有对adb工具的源代码进行修改,让adb对文件名的编码进行相应的转换.       具体过程如下:使用ubuntu 12.04 下载android的源代码,具体过程参考网络,ubuntu一定要使用64位机,因为最新的a

Android TimePicker 直接输入的问题解决方案

Android TimePicker 直接输入的问题解决方案 TimePicker 提供了上下的按钮,点击按钮,相关操作都是正常的.但是如果直接在输入框中修改小时或分钟后直接点击按钮取值,会发现不能真正改变时间. 以下代码得不到预期结果. @Override public void onClick(View v) { int i = timePicker1.getCurrentHour(); int j = timePicker1.getCurrentMinute(); startPoint.s

jsp中文问题解决方案(完整版)

js|解决|问题|中文 ====================http://www.glgg.net/blog===================zsjnju@hotmail.com================ 开发java应用出现乱码是很常见的,毕竟现在unicode的使用还不是很广泛,在使用gb2312(包含了gbk简体,big5繁体)的系统中要正确实现 中文的display和数据库的存储是最基本的要求. ========================http://www.glgg

在服务器上部署了一个OnlyOffice运行后在打开的文档区域中只能输入英文,不能切换到中文输入怎么回事?打开一个中文的Word显示出来是乱码怎么解决这些问题?

问题描述 在服务器上部署了一个OnlyOffice运行后在打开的文档区域中只能输入英文,不能切换到中文输入怎么回事?打开一个中文的Word显示出来是乱码怎么解决这些问题?有谁使用过或者解决过这样的问题?不知道.NET大婶是否解决过的问题?实在是干不动了!求分享. 解决方案 解决方案二:是没有中文字典的问题!有谁解决过这个问题码?

qt-QT中文输入与显示的问题

问题描述 QT中文输入与显示的问题 我是windows系统.我用的是vs2012编写qt程序,我已经向vs中添加了qt类库.现在我遇到了中文输入和显示的问题.我一向窗口部件Qlable或Qlineedit显示中文就出现乱码,我在网上百度的小样都运行不了,说是我没有定义setCodecForTr函数,但哪个函数怎么定义啊,我以为是头文件中自动包含了定义和实现呢. #include "mywindow.h" #include #include int main(int argc, char

easy ui combox-jquery easy UI combox火狐无法检索中文输入的问题

问题描述 jquery easy UI combox火狐无法检索中文输入的问题 现在是初始化的时候无法检索,但检索一次后就可以成功,求解答,谷歌跟ie是正常的 解决方案 已经处理好了,在jquery.easyui.min.js中将绑定keydown改为keyup,初始化时也ok了 解决方案二: easy-ui中文Jquery easy ui dataGrid

[求助]关于asp:TextBox 限制最大位数中文输入问题!

问题描述 使用IE浏览器我有两个Textbox控件TextBox1--显示内容TextBox2--录入内容TextBox2的MaxLength等于TextBox1的位数长度.(TextBox2.MaxLength=TextBox1.Text.Length)现在问题是中文输入的时候:由于限制了输入的位数.字符限制在拼音输入的阶段就对其位数进行了限制.造成转换汉字时候部分输入的拼音变换汉字前显示不完整.实际拼音阶段输入的是zhongguo但只显示了zh求IE浏览器解决方法火狐浏览器无此问题. 解决方

c++的问题-c++括号匹配,用中文输入括号与用英文输入的括号结果不一样

问题描述 c++括号匹配,用中文输入括号与用英文输入的括号结果不一样 用c++匹配括号,用英文输入(()匹配失败,而用中文输入(()却匹配成功??? 解决方案 是不是全角或者半角的问题?