如何用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

呀,這麼認真都看到這裏啦,幫忙點個推薦支持一下唄,灰常感謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章