1.前言
閱讀本文你將了解:
- Airtest的專用輸入法
Yosemite.apk
- Airtest的
text
接口 - 輸入法的回車和搜索問題
- 拓展:Poco的
set_text
接口
PS:本文重點說明Android設備輸入文本的相關問題,iOS設備和網頁的輸入問題此文不展開討論。
2. Airtest的專用輸入法 Yosemite.apk
在Android平台下,Airtest配了一個專用的輸入法 Yosemite.apk
。我們可以在Airtest庫的這個路徑下找到它:
當我們在Android設備上運行到輸入文本的接口,比如 text
接口時,會自動啟用這個 Yosemite
輸入法來進行輸入。(注意,如果是初次調用輸入接口,則會先在該Android設備上自動安裝該應用,再啟用它來進行輸入操作。)
1)沒有軟鍵盤的Yosemite輸入法
在啟用 Yosemite
輸入法時,Android設備的底部會有一個輸入法的提示條,並且該輸入法不像常規的輸入法那樣,Yosemite輸入法沒有軟鍵盤:
所以很多同學初次見到這個輸入法的時候,都會感到疑惑。其實這是正常的。也有些同學會問,能不能去掉這個輸入法的提示,目前暫時是不支持去掉的。
如果同學們遇到了 Yosemite
的底部提示,遮擋到手機應用按鈕的情況,可以把具體機型、具體應用和按鈕頁面截圖,提單給我們的開發者去核查和處理: https://airtest.netease.com/issue_create 。
2)如何切換輸入法
那當Android設備啟用 Yosemite
輸入法時,我們就只能通過腳本來對設備進行輸入,無法手工輸入。
如果需要手工輸入,可以在手機系統的輸入法設置中,把輸入法切換回系統輸入法即可恢復。
如果同學們使用了我們的AirtestIDE,也可以使用它提供的 安卓手機助手功能
,在手機助手中可以簡單地點擊鼠標來切換輸入法:
3)能不能不使用Yosemite輸入法
也有同學會覺得,這個輸入法沒有鍵盤,手動輸入的時候還要切換到別的輸入法,太麻煩了,那我能不能不使用 Yosemite
輸入法呢?
其實是可以的,如果我們確定在測試腳本中,不會涉及任何文本輸入的操作;或者是只需要輸入英文,並且是以 adb shell input
的方式來進行輸入的,我們可以不在手機上安裝 Yosemite
輸入法。
shell("input text 'hello world'")
我們也可以通過下述方式,在腳本中指定不使用 Yosemite
輸入法:
from airtest.core.api import *
# 方式一
auto_setup(__file__,devices=["android:///?ime_method=ADBIME"])
# 方式二
init_device("Android", ime_method="ADBIME")
3. Airtest的 text
接口
那了解完輸入法之后,我們來看下輸入的接口。Airtest框架給我們提供的輸入接口是 text
接口,在使用 text
接口之前,我們 必須先點擊輸入框,激活下輸入光標 ,可以用圖像點擊、控件點擊,均可,只要保證輸入框的輸入光標已經激活,我們就可以使用 text
接口進行輸入。
1)text
接口默認的回車操作
text
接口有一個默認參數 enter=True
,會在輸入完畢后自動按一下回車鍵(相當於 keyevent("ENTER")
),假如不需要,請傳入 enter=False
。
text("test", enter=False)
2)text
接口的搜索操作
部分輸入框,需要在輸入內容后,點擊輸入鍵盤上的 搜索
按鈕才能夠激活搜索操作,可以傳入 search=True
參數:
text("test", search=True)
輸入法中顯示的額外按鍵是 EDITOR CODE
,剛才這個代碼中的 search=True
實際上是傳入了 editor code 3
。因為搜索鍵是最常用的按鍵,因此我們將它封裝進了 text
接口中:
如果有點擊除了 搜索
以外其他按鈕的需求,需要查閱文檔 Editor Action Code
來獲取代碼(如果該網頁訪問不了的話,可以自行搜索關鍵詞 IME_ACTION_SEARCH
),然后手動傳入代碼進行點擊。
dev = device()
# 按一下輸入法的Go按鈕 IME_ACTION_GO,對應鍵值為2
dev.yosemite_ime.code("2")
3)text
接口回車失效
如果我們在使用類似 text("11")
這樣的腳本,不能正確回車的時候,我們可以使用下述方式來添加這個回車的效果:
text("11")
ime=G.DEVICE.yosemite_ime
ime.code(6)
4)輸入失敗的處理
text
輸入失敗,大概率都繞不過下面幾個問題:
- 手機阻止了
Yosemite.apk
的安裝和運行 - 沒有將
Yosemite
輸入法設置為手機默認輸入法 - 輸入賬號密碼之類的,沒有關閉手機的
安全輸入
/安全鍵盤
設置 - 部分手機的兼容性問題
- 部分模擬器未關閉
物理鍵盤
的問題
那對應地,當出現無法輸入,或者輸入報錯的時候,我們就可以依次檢查下是否有上述情況,比如檢查手機上是否正常安裝了 Yosemite.apk
,輸入法設置里,是否將 Yosemite
設置為了默認輸入法等等。
手機的兼容性問題,我們可以參考官方教程文檔的Android連接常見問題這部分的內容: https://airtest.doc.io.netease.com/IDEdocs/3.2device_connection/3_android_faq/#2_1 。
輸入密碼界面黑屏、無法輸入時,也別需要關注手機上的 安全輸入
、 安全鍵盤
之類的設置是否已經關閉。
4. 拓展:poco的 set_text
接口
那其實,除了Airtest框架提供的 text
接口,Poco框架也提供了輸入的 set_text
接口:
poco("com.android.mms:id/recipients_editor").click()
poco("com.android.mms:id/recipients_editor").set_text("test")
如果我們測試的應用支持poco,比如原生應用,或者是已經接入了pocoSDK的游戲應用,在輸入時,都可以使用這個 set_text
接口。
相比Airtest的 text
接口,它還有一點比較便利的是快速清空輸入框:
poco("com.android.mms:id/recipients_editor").set_text(" ")
5. 結束語
那今天關於Airtest的文本輸入就聊到這里,還有其他關於文本輸入比較好奇的問題,歡迎同學們給我們留言~
Airtest官網:https://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b
官方答疑 Q 群:117973773
呀,這么認真都看到這里啦,幫忙點個推薦支持一下唄,灰常感謝~