安卓 App 自动化:遇到搜索栏无搜索按钮怎么办?安卓系统自带输入法无法输入中文字符处理方式

今天,遇到一个比较大的坑。首先说下由来:
今天写了一条 Andriod 的自动化测试用例,使用的框架是 Appium,语言 Python。因为公司是做奢侈品电商的,所以难免要做 app 的自动化。做过 Android 的 app 测试或者使用 Andriod 手机买过东西,如果你仔细点,会发现 Andriod 的电商 app 中大部分的搜索栏旁边是没有搜索这个按钮的。输入完文本后,一般通过手机键盘上的搜索按钮进行搜索操作。今天的这个坑就跟这个有关。拿我们做 ui 自化测试的人员来说,搜索栏没有搜索按钮那是要特殊处理的。

先说下另一个坑:在我写测试用步骤到搜索栏这一块的时候,我很自然的使用了 Send_keys()这个方式输入文本。文本内容为中文,我们的国语中文汉字,比如输入一个 “你好”。但是你会发现,日志消息打印输入“你好”成功了,但是事实上是搜索栏里仍是空的。你也可以在 appium 的 inspector 尝试一下输入文本操作,看看是否可以。反正我的不行。
image.png
通过反复查资料和自己的尝试明白了:我们使用 appium 时,默认使用的是系统也就是手机系统自带的输入法,一般手机系统自带的输入法是不支持 Unicode 编码方式发送字符串的。所以我们要做的是将 unicodeKeyboard 设置为 True,设置使用 Unicode 编码方式发送字符串。这样你在运行你的脚本的时候你会发现你可以输入中文了。也可以设置 resetKeyboard 为 true 隐藏键盘。这时候你可以到你的手机系统设置看下,你的输入法默认已经改成了 unicode IME 了。
这虽然解决了输入的问题,但是也是引发了另一个更坑的问题。那就是开始说的,搜索栏没有搜索按钮进行点击搜索。

我说的可不仅是搜索栏没有,连你的输入法也是没有的?,搜索栏没有键盘也没有都想到的应该是直接回车?。因为我们设置了 unicodeKeyboard 设置为 True,这家伙可是没有键盘显示的。并且你使用 press_keycode(66)回车操作的时候,他会出现先将你输入的文本清空了在进行的回车搜索操作。所以我改变了方式:
首先,你要安装一个第三方的输入法到本机。我安装的是搜狗输入法。
然后在我们的脚本上,可以通过 driver.available_ime_engines 获取到本机(Android 手机)的所有输入法,我的是['com.baidu.input_huawei/.ImeService', 'com.sohu.inputmethod.sogou/.SogouIME', 'com.qihoo.appstore/com.qihoo360.mobilesafe.pcinput.HandoffIme', 'io.appium.settings/.AppiumIME', 'io.appium.settings/.UnicodeIME'], 返回的是一个 list,也可以使用 adb shell ime list -s 查看。可以看到不仅包括系统自带的输入法:百度输入法华为版,还有我安装的第三方搜狗输入法,后面那俩输入法估计都看出来是什么了就不说了。
我只要关心我的最后一个 unicode IME 和搜狗的输入法。 没有搜索按钮,我们就可以使用搜狗输入法进行回车进行搜索操作。
首先 ,在使用 unicode 输入法输入中文文本后,使用 os 模块进行 adb 命令切换输入法:os.system("adb shell ime set com.sohu.inputmethod.sogou/.SogouIME") ,记得切换后使用 sleep 等待个一两秒,重点:必须 sleep 等待一下。
此时已经切换到了搜狗输入法上。在使用 driver.press_keycode(66)使用键盘的回车操作,在等待停顿一下。在切换回 unicode 输入法 os.system("adb shell ime set io.appium.settings/.UnicodeIME")。
image.png
这个时候输入中文也可以了,搜索也可以了?。不过以后遇到这种情况都需要去调用下此方法进行切换。封装一下就好。

4 回帖
请输入回帖内容 ...
  • qingqingdufu

    最近碰到了这个问题,命令查出来的华为荣耀的手机输入法只有一种,用不了。“搜索” 是在输入法键盘的确认位置,定位不到,press_keycode(66)或者 84 都尝试了,没用。这条自动化用例就搁置了。

  • 其他回帖
  • huahua
  • huahua
  • huahua

    😎