如何在各大平臺下“模擬輸入空格”

1. 前言

Airtest和Poco自動化框架分別提供了 text 接口和 set_text 接口幫助我們 實現文本輸入的操作

但部分特殊字符,比如同學們經常問到的空格,使用這兩個接口並不一定完全能滿足我們的期望,所以下文我們將詳細介紹這兩個關於文本輸入的接口,並介紹我們該如何 在各大平臺下模擬輸入空格

2. 輸入文本的接口介紹

1)Airtest的text接口

Airtest API文檔中查看我們的 text 接口,可以獲取以下信息:

text 接口是一個跨平臺的接口,支持Android、Windows和iOS平臺。

① 輸入前激活文本輸入框

在文本框使用 text 進行輸入操作之前,我們必須激活文本框,也就是我們通常在輸入操作之前,會點擊一下文本框,使輸入光標激活在文本框內:

# 點擊激活文本框,也可以是touch操作
poco("SearchField").click()

# 輸入文本
text("網易 雲音樂",enter=False)
② 輸入後的回車操作

text 接口默認情況下,會在輸入完畢後執行一次回車(ENTER)操作。在Android平臺下,回車的表現可能是搜索操作;在iOS平臺下,回車的表現可能是換行操作......

如果同學們不需要在輸入完畢後執行回車動作,可以設置 enter=False :

text("message",enter=False)
③ 輸入後的搜索操作

部分Android的搜索輸入框,在執行文本輸入之後,需要點擊鍵盤的搜索按鈕才能觸發搜索的動作,所以在Android平臺下,我們的 text 接口新增了1個參數 search ,用於支持這種情況:

text("test", search=True)
2)Poco的set_text接口

Poco API文檔中查看 set_text 接口,我們可以知道它可以用來設置控件的文本屬性。

比如我們使用 set_text 接口,給某個文本輸入框設置了文本屬性,則達到了輸入文本的目的。使用這個輸入文本還有一個好處,就是我們使用 poco("文本框").set_text(" ") 就能快速清空文本框的內容。

3)關於選擇text還是set_text進行輸入

我們只需要記住一點:文本框支持哪個輸入,我們就選擇哪個接口。因爲平臺和文本框的多樣化,我們很難保證 text 接口能完全支持所有的輸入框,同理,set_text 也是如此。

當我們在某個文本框,使用 text 接口無法輸入時,我們可以看看能否使用Poco的 set_text 接口,可以的話,我們就嘗試更換成 set_text 來執行文本輸入操作。

但有一點,如果文本框支持Poco的 set_text ,並且我們需要執行清空文本框的內容,這時我們使用 set_text 的置空,將非常方便快捷:

poco("文本框").set_text(" ")

3. 在Android平臺下輸入空格

Airtest和Poco框架都支持Android原生應用,所以我們支持使用 text 或者 set_text 接口來輸入文本和空格:

# text輸入
text("薛之謙 天外來物")
sleep(1.0)

# 刪除
for i in range(10):
    keyevent("67")
    
# set_text輸入    
poco("com.netease.cloudmusic:id/search_src_text").set_text("薛之謙 天外來物")
sleep(1.0)

# set_text置空
poco("com.netease.cloudmusic:id/search_src_text").set_text(" ")

4. 在iOS平臺下輸入空格

理論上,Airtest和Poco都支持iOS原生應用,我們可以使用 text 接口和 set_text 接口來進行輸入操作;但是因爲大部分iOS的輸入框都不支持直接設置text屬性,所以在iOS平臺下,我們還是常用Airtest的 text 接口來輸入文本和空格:

# text輸入
text("網易 雲音樂",enter=False)
sleep(1.0)

# 刪除
for i in range(10):
    text("\b",enter=False)

5. 在Windows平臺下輸入空格

在上文中我們已經知道,text 是跨平臺的API,支持Windows平臺;但Poco暫時還不支持Windows窗口(除了已經接入Poco-SDK的遊戲窗口)。

所以我們優先選擇使用Airtest的 text 接口在Windows平臺下輸入空格,嘗試如下:

# 中文輸入
text("薛之謙 天外來物")

for i in range(10):
    keyevent("{BACK}")

# 純英文輸入
text("Love Story")

發現這樣並不會按照預期輸入我們想要的空格,所以我們需要嘗試別的方法,比如利用Windows平臺下的 keyevent 鍵碼:

# 中文輸入
text("薛之謙",enter=False)
keyevent("{VK_SPACE}")
text("天外來物")
sleep(1.0)

for i in range(10):
    keyevent("{BACK}")

# 純英文輸入
text("Love{VK_SPACE}Story")

可以看到效果符合我們的預期,更多Windows平臺下的keyevent鍵碼,我們可以參考 pywinauto.keyboard 模塊的內容:https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html

6. 小結

簡單回顧下,在Android和iOS平臺下,我們給 text 或者 set_text 接口傳入的字符串帶空格,接口會按照預期幫我們輸入這個空格;但在Windows平臺下,我們就需要藉助keyevent鍵碼 "{VK_SPACE}" 來幫助我們輸入空格。

如有其它問題,同學們可以直接反饋到我們項目的issue收集網頁上:https://airtest.netease.com/issue_create


Airtest官網https://airtest.netease.com/
Airtest教程官網https://airtest.doc.io.netease.com/
搭建企業私有云服務https://airlab.163.com/b2b

官方答疑 Q 羣:654700783

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

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