先说一下环境,我们是使用 C# Appium1.3.1,对各种方法进行了封装,其中输入 text 时是使用了下面封装的一个 ADBCommand 方法,调用"adb shell input text xxxxx"的命令行以输入 text。目前已经在 Samsung(4.4.2), 华为 (4.4.2),魅族 MX4(4.4.4) 进行调试,输入都没有什么问题。现在调试 OPPO Android4.3 系统时,输入 text 总是会出现两次,例如输入 “http”,实际在页面上输入的却是 “hhttttpp”,或者 “hhtttptp”。
找了很久没有找到原因,来论坛向大神求助一下 T_T
语言:C#
Appium 服务器版本:1.3.1
系统型号版本: OPPO-X9007, Android4.3
输入法:系统自带输入法
问题描述:使用封装的 adb shell input text,或者 Appium 自带的 SendKeys() 方法,都会出现各字符出现了两次的情况。
对比:直接打开一个 cmd,调用命令"adb shell input text http",是可以正常输入 http 的。

目前分析:在执行机上运行 bootstrap:

adb.exe -s de5e5976 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap

分析 2:然后执行下列的 ADBCommand 方法,输入 http,果然重现出了这个问题。看来 OPPO 系统中 bootstrap 和 ADB 同时接受到了命令并且执行了,因此输入成了 hhttttpp。目前还没有找到好的解决办法,继续努力下- 3-

解决方案:进一步调试发现是 OPPO 自带的搜狗输入法(1.0.0)的问题,换成另外一种输入法,这个问题就解决了!

我封装的 ADBCommand 方法如下(C#):

public static void ADBCommand(string cmd)
        {
            Process process = new Process();

            process.StartInfo.FileName = @"cmd.exe";
            process.StartInfo.Arguments = string.Format("/c adb shell {0}", cmd);

            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardInput = false;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.CreateNoWindow = true;

            process.Start();
            process.WaitForExit();
            Thread.Sleep(500);//为了调试增加一个sleep。
            process.Close();
        }


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