如何用Airtest指令碼切換手機的輸入法
1. 前言
前幾期的推文中,我們講了Airtest輸入文字相關的一些問題,其中就有提到Airtest的專用輸入法Yosemite。很多同學對這個輸入法又愛又恨,愛的是這個輸入法可以很輕鬆幫我們實現中文輸入,恨的是這個輸入法沒有軟鍵盤,想手動輸入的時候,還要去設定裡面切換成系統輸入法。
那其實,有沒有辦法 直接在程式碼裡面就實現手機輸入法的切換呢 ?比如我們要使用Airtest的 text
介面之前,就啟動Yosemite輸入法,當使用完 text
之後,我們就再切換成系統輸入法。
今天我們就一起來看看怎麼實現這個需求把!
2. 解決問題的思路
1)搜ADB指令
ADB是一種功能多樣的命令列工具,可讓我們與裝置進行通訊。ADB 命令可用於執行各種裝置操作(例如安裝和除錯應用),並提供對 Unix shell(可用來在裝置上執行各種命令)的訪問許可權。
因此,我們可以藉助強大的搜尋引擎(建議使用谷歌),來看下是否有對應的ADB指令幫助我們實現切換輸入法的操作:
找到之後,我們可以先用ADB指令跑通我們切換輸入法的需求。
2)搜Airtest的API文件
當使用指令跑通操作之後,我們可以再搜一下Airtest的API文件,看看有沒有介面,可以讓我們方便地呼叫這些指令的:
看起來這個 shell
就很合適,大概明確實現思路之後,接下來我們就動手實操下吧!
3. adb指令切換輸入法
1)檢視手機內所有的輸入法
adb shell ime list -a
可以幫助我們列出手機裡面的所有輸入法,但是內容很長:
我們可以在命令列裡篩一下 adb shell ime list -a|findstr mId=
2)切換輸入法
ADB指定切換某個輸入法,需要 先啟動,再設定 :
adb shell ime enable 輸入法ID
adb shell ime set 輸入法ID
以切換成Yosemite輸入法為例:
adb shell ime enable com.netease.nie.yosemite/.ime.ImeService
adb shell ime set com.netease.nie.yosemite/.ime.ImeService
3)檢視當前使用的輸入法
設定完成之後,我們還可以使用指令來檢查下當前的輸入法是否已經設定成我們想要的輸入法:
adb shell settings get secure default_input_method
4. 將指令切換輸入法轉換成python指令碼
跑通了指令切換輸入法的流程之後,我們就可以想辦法將其轉換成python指令碼了。Airtest封裝有 shell
介面,可以給我們用於執行ADB指令:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__)
ym = "com.netease.nie.yosemite/.ime.ImeService"
sh = "com.sohu.inputmethod.sogouoem/.SogouIME"
def set_ime(ime):
shell("ime enable " + ime)
shell("ime set " + ime)
set_ime(ym)
text("123", enter=False)
set_ime(sh)
1)關於獲取輸入法的ID
其實不需要通過ADB指令,我們也可以通過Airtest封裝的方法來獲取手機內所有輸入法的列表:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__)
dev = device()
print(dev.yosemite_ime._get_ime_list())
5. 小結
本次推文我們主要了解了2方面的內容,一個是使用ADB指令切換輸入法,包含:
- 檢視所有輸入法的指令:
adb shell ime list -a
- 啟動指定輸入法的指令:
adb shell ime enable 輸入法ID
- 設定指定輸入法的指令:
adb shell ime set 輸入法ID
- 檢視當前輸入法的指令:
adb shell settings get secure default_input_method
另一個是將切換輸入法的需求轉換成Airtest指令碼,包含:
- 用於執行ADB指令的
shell
介面:shell("ime set 輸入法ID")
- 獲取輸入法列表的介面:
device().yosemite_ime._get_ime_list()
Airtest官網:https://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有云服務:https://airlab.163.com/b2b
官方答疑 Q 群:117973773
呀,這麼認真都看到這裡啦,幫忙點個推薦支援一下唄,灰常感謝~