此文章來源於項目官方公衆號:“AirtestProject”
版權聲明:允許轉載,但轉載必須保留原鏈接;請勿用作商業或者非法用途
1. 前言
最近有收到同學們的一些提問,使用Airtest的 text
接口,發現在部分模擬器上, text
無法輸入中文,不知道該怎麼處理。
今天我們就輸入這個小問題,來詳細聊一下。
2. Airtest的輸入法簡介
對於Android設備來說,Airtest的輸入功能,由 Yosemite.apk
提供。有了這個apk,就可以支持我們在Android設備上輸入中文,而不是侷限於只能輸入英文字母的 adb input text
。
所以在調用Airtest的 text
接口之前,請務必在Android設備上安裝好 Yosemite.apk
。
3.在部分特殊設備上無法輸入中文
也有一些情況,即使我們安裝好了 Yosemite.apk
,使用 text
接口進行輸入時,卻只能輸入英文,沒法輸入中文,我們以mumu12模擬器爲例:
在給mumu12輸入中文的時候,出現了1個報錯:
airtest.core.error.AdbShellError: stdout[b''] stderr[b"\r\nException
occurred while executing 'text':\r\njava.lang.NullPointerException:
Attempt to get length of null array\r\n\tatcom.android.server.input.InputShellCommand.sendText(InputShellCommand.java:284)\r\n\tat
com.android.server.input.InputShellCommand.runText(InputShellCommand.java:256)\r\n\tat
com.android.server.input.InputShellCommand.onCommand(InputShellCommand.java:197)\r\n\tat com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\r\n\tat
android.os.ShellCommand.exec(ShellCommand.java:38)\r\n\tat com.android.server.input.InputManagerService.onShellCommand(InputManagerService.java:3591)\r\n\tat
android.os.Binder.shellCommand(Binder.java:950)\r\n\tat
android.os.Binder.onTransact(Binder.java:834)\r\n\tat
android.hardware.input.IInputManager$Stub.onTransact(IInputManager.java:1167)\r\n\tat android.os.Binder.execTransactInternal(Binder.java:1184)\r\n\tat android.os.Binder.execTransact(Binder.java:1143)\r\n"]
這是因爲模擬器沒有真正把 Yosemite
輸入法調起來導致的,我們可以到 Yosemite.apk
裏面,找到輸入法,啓用 Yosemite
輸入法,之後關閉掉其餘的輸入法:
之後再通過下述腳本的方式,給設備輸入中文文本:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__)
shell('am broadcast -a INPUT_TEXT --es text "大話西遊"')
4. 小結
今天主要講述了,在部分特殊Android設備裏,遇到 text
輸入接口無法完成的一些輸入事情的時候,我們還可以通過怎樣的方式來實現我們的輸入效果,本質還是調用了 Yosemite.apk
裏面的功能。
如果還有其他關於輸入感興趣的問題,歡迎給我們私信/留言。
AirtestIDE下載:airtest.netease.com/
Airtest 教程官網:airtest.doc.io.netease.com/
搭建企業私有云服務:airlab.163.com/b2b
官方答疑 Q 羣:117973773