Airtest輸入文本那點事

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

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

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