轉載:https://www.cnblogs.com/dianxiao2/p/5520794.html
最近打算詳細看一下appium的API。今天閑來無事,邁開了這條道路的第一步,打開文檔后,映入眼簾的第一個API是關於激活輸入法的,那么就從這里開始吧。希望我這些文章能幫到跟我一樣的小白們,當需要使用appium的時候不至於一臉懵逼的不知所措。
好嘞~上菜!!!
1. available_ime_engines
Get the available input methods for an Android device. Package and activity are returned (e.g., ['com.android.inputmethod.latin/.LatinIME']) Android only.
好吧,上面是我直接從API里拷出來的,我英文也不好只能借助百度翻譯,這個API的大概意思是:這是一個安卓的方法,獲取當前設備可用的輸入法。
那么我們先來看一下,我手機里有幾種輸入法;
通過手機的輸入法設置看到了,目前手機上可用的輸入有3種,‘谷歌’、‘百度’、‘appium自帶’。實驗一下
a = driver.available_ime_engines print(a) 通過運行之后發現,appium給我返回了一個列表:
好吧,可能看不太懂,但是挑關鍵詞分析一下,確實對應的是三個輸入法‘com.baidu’、‘com.google’、‘io.aapium’
2.activate_ime_engine(self, engine)
Activates the given IME engine on the device. Android only. :Args: - engine - the package and activity of the IME engine to activate (e.g., 'com.android.inputmethod.latin/.LatinIME')
也是從API直接拷貝過來的,這次還算貼心的給了一個例子,這個API的大概意思是:這是一個安卓的方法,激活輸入法。
那我們就把剛剛獲得的三個輸入法,分別實驗一下,首先是百度
driver.activate_ime_engine('io.appium.android.ime/.UnicodeIME')
driver.find_element_by_id("輸入框").click()
driver.find_element_by_id("輸入框").set_text('tt')
從紅圈處可以明顯的看出來,啟動的就是百度的輸入法沒有錯。
接下來是谷歌
driver.activate_ime_engine('com.google.android.inputmethod.pinyin/.PinyinIME')
driver.find_element_by_id("輸入框").click()
driver.find_element_by_id("輸入框").set_text('tt')
從紅圈處標志性的網格球可以看出,啟動的就是谷歌的輸入法。
最后是appium的輸入法
driver.activate_ime_engine('io.appium.android.ime/.UnicodeIME')
driver.find_element_by_id("輸入框").click()
driver.find_element_by_id("輸入框").set_text('123')
不用懵逼,appium的輸入法就是沒有界面。
其實大可不必這么麻煩,在執行過 driver.activate_ime_engine() 之后,“手機設置->輸入法設置->當前輸入法”,就已顯示所設置的輸入法了,可以自己試試看。
3.active_ime_engine
Returns the activity and package of the currently active IME engine (e.g.,'com.android.inputmethod.latin/.LatinIME').
Android only.
這個API的大概意思是:這是一個安卓方法,獲取當前輸入法的包名和Activity
使用一下看看結果:
輸入代碼
driver.activate_ime_engine('io.appium.android.ime/.UnicodeIME') a = driver.active_ime_engine print('當前輸入法是:'+a) 輸出結果:
輸入代碼
driver.activate_ime_engine('com.google.android.inputmethod.pinyin/.PinyinIME') a = driver.active_ime_engine print('當前輸入法是:'+a) 輸出結果:
輸入代碼
driver.activate_ime_engine('com.baidu.input_miv6/.ImeService') a = driver.active_ime_engine print('當前輸入法是:'+a) 輸出結果:
Deactivates the currently active IME engine on the device. Android only.
這個API的大概意思是:這是一個安卓方法,關閉當前的輸入法
我一臉懵逼的發現,當我使用這個方法,關閉了某個輸入法后,在“手機設置->輸入法設置->當前輸入法”中,也看不到這個被關閉的輸入法了。
原本的輸入法是這樣的三個
執行代碼
a = driver.active_ime_engine
print('當前輸入法是:'+a) driver.deactivate_ime_engine() 輸出結果: 
百度輸入法,沒了~~~~~~~~ 依次嘗試之后發現,是可以將所有輸入法依次‘變’沒的。但也不用擔心,通過 available_ime_engines 和 activate_ime_engine,仍然可以設置輸入法,被激活的輸入法在設置中也會變得重新可見。
5.is_ime_active(self) Checks whether the device has IME service active. Returns True/False. Android only. 這個API的大概意思是:這是一個安卓方法,檢查是否有輸入法被啟用,返回True/False.
執行代碼
a = driver.is_ime_active()
print(a) 輸出結果:True 嘗試了幾下,暫時不知道怎么才能輸出False。感覺這個API也沒啥大用,就不去糾結了。
6.hide_keyboard(self, key_name=None, key=None, strategy=None) Hides the software keyboard on the device. In iOS, use `key_name` to press a particular key, or `strategy`. In Android, no parameters are used. 這個API的大概意思是:隱藏鍵盤(吧啦吧啦的說了一下iOS和安卓的用法不一樣,在下不用iOS就不羅嗦了)
執行代碼
driver.activate_ime_engine('com.baidu.input_miv6/.ImeService')
driver.find_element_by_id("輸入框").click() sleep(5) driver.hide_keyboard()
輸出結果:
可以看到指定的百度輸入法,再點擊輸入框后調起顯示,然后被隱藏
四不四執行完hide_keyboard()之后,在需要輸入的操作時‘百度輸入法’就會變得跟‘appium輸入法’一樣不彈出界面,專心的悶頭干活了呢?
執行代碼
driver.activate_ime_engine('com.baidu.input_miv6/.ImeService')
driver.find_element_by_id("輸入框").click() sleep(5) driver.hide_keyboard()
driver.find_element_by_id("輸入框").click()
輸出結果:
然而並沒有悶頭干活~~還是顯示出來了。
看來這個API不是讓輸入法悶頭干活,而是在輸入完內容后收起鍵盤,讓‘輸入法’遮擋的按鈕可以被點擊。