Appium+python自動化(十三)- 輸入中文 - 一次填坑記(超詳解)
簡介
無論你在哪裡,在做什麼都會遇到很多坑,這些坑有些事別人挖的,有些是自己挖的。別人挖的叫坑人,自己挖的叫自殺,兒子挖的叫坑爹。因此在做app自動化道路上也不會是一帆風順的,你會踩很多坑,這些坑和你就是你死我活的節奏,不是坑把你埋了,就是你把坑填了。由於咱們都是黃面板的中國人用的大部分都是中文的app,而人家老外都是白面板藍眼睛,用的是英文的APP,人家這個問題可以忽略。我們卻不可以的,必須面對的。所以首先巨集哥要帶小夥伴們解決中文輸入的問題!
你能走多遠,取決於你填坑能力有多強
微博上看到一張圖:
01
在你的計劃中,未來目標是清晰可見的,中間一片坦途,只需要稍微用點力,就可以順利達成。
但實際上呢?
風雨,陡壁,深淵……一路艱難險阻,到處都是坑,最關鍵是,目之所及全是困難,連目標的影子都看不見!
可以說非常形象了!我們的生活不就是這樣嗎?
成長的路上,總是充滿了各種“坑”,而你能走多遠,取決於你“填坑”的能力有多強。
02
“為什麼你總是下班這麼晚?”
“因為要改的Bug太多了啊。”
“那為什麼跟你同組的其他同事很早就下班了?就你一個人總是走不了?”
“沒辦法啊,太複雜的Bug他們改不了,只能我去解決,不然為什麼我月薪2萬,他們只有1萬?”
“……好吧。”
沒錯,工作中就是這樣。
遇到問題,能解決問題的那個人,永遠是最被需要的人,而因為被需要,不可或缺,所以才能拿到高薪,獲得更好的個人發展。
改不了的Bug,搞不定的客戶,談不下來的專案……我們習慣性求助於我們的上級領導,而這似乎也解釋了,為什麼他是上級領導?因為他能解決我們解決不了的問題。
在職場,你的核心競爭力,在於你“填坑”的能力,是否能填別人填不了的坑。
好了,故事就講到這裡吧。言歸正傳,本篇就由巨集哥把前邊留有懸念的中文輸入問題的坑,帶著小夥伴們一起把這個坑填平它,KO它。
巨集哥思路:巨集哥將會通過遮蔽軟鍵盤,繞過手機的軟鍵盤方法,解決中文輸入的問題。
1、定位搜尋
1、開啟淘寶點搜尋按鈕,進入到搜尋頁面
2、然後定位到搜尋框後用sendkeys方法輸入“hongge”,這裡定位元素用第四篇講的uiautomatorviewer工具就可以了
3、例項程式碼
4、執行後夜神模擬器、appium、程式碼的執行過程如下(拼音或者英文),請小夥伴們和巨集哥一起仔細看是不是搜尋框輸入了:hongge 拼音
5、參考程式碼1 # coding=utf-8 2 # 1.先設定編碼,utf-8可支援中英文,如上,一般放在第一行 3 4 # 2.註釋:包括記錄建立時間,建立人,專案名稱。 5 ''' 6 Created on 2019-7-04 7 @author: 北京-巨集哥 QQ交流群:707699217 8 Project:學習和使用appium自動化測試-輸入中文 - 一次填坑記 9 ''' 10 # 3.匯入模組 11 from appium import webdriver 12 import time 13 desired_caps = {} 14 desired_caps['platformName'] = 'Android' #android的apk還是IOS的ipa 15 desired_caps['platformVersion'] = '8.0' #android系統的版本號 16 desired_caps['deviceName'] = '127.0.0.1:62001' #手機裝置名稱,通過adb devices 檢視 17 desired_caps['appPackage'] = 'com.taobao.taobao' #apk的包名 18 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome' #apk的launcherActivity 19 #desired_caps['unicodeKeyboard'] = True #使用unicodeKeyboard的編碼方式來發送字串 20 #desired_caps['resetKeyboard'] = True #將鍵盤給隱藏起來 21 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #啟動伺服器地址,後面跟的是手機資訊 22 # 休眠五秒等待頁面載入完成 23 time.sleep(5) 24 driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click() 25 time.sleep(3) 26 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").click() 27 28 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys(u"hongge")
2、執行指令碼
1、首先要確認手機上的輸入法是用的什麼輸入法,如果預設是中文的輸入法,啟動後會出現下面情況,無法輸入成功
2、於是可以先把手機上的輸入法改成英文的狀態,這樣就可以輸入英文字串了。那麼問題來了,如果想輸入中文的字串呢?如何解決。。。
3、遮蔽軟鍵盤
1、通過前面的操作,大概可以知道,在APP裡面輸入字串是呼叫的軟鍵盤輸入的,有沒辦法像selenium做web自動化時候一樣,直接sendkeys繞過鍵盤輸入呢?
2、於是可以想辦法遮蔽軟鍵盤,只需在desired_caps{}設定裡面加兩個引數(注意了,注意力,注意力,能不能填坑就看這裡啊!!!),如果直接跟隨巨集哥的小夥伴們直接把註釋去掉了,就可以。
3、unicodeKeyboard是使用unicode編碼方式傳送字串
4、resetKeyboard是將鍵盤隱藏起來
4、輸入中文字元
1、將上面程式碼改成輸入中文u“北京-巨集哥”,然後執行指令碼,在手機上檢視結果。(python2中文前面要加個u,python3的可以忽略)
2、執行後夜神模擬器、appium、程式碼的執行過程如下:請小夥伴們和巨集哥一起仔細看是不是搜尋框輸入了:北京-巨集哥 中文漢字
5、參考程式碼
# coding=utf-8 # 1.先設定編碼,utf-8可支援中英文,如上,一般放在第一行 # 2.註釋:包括記錄建立時間,建立人,專案名稱。 ''' Created on 2019-7-04 @author: 北京-巨集哥 QQ交流群:707699217 Project:學習和使用appium自動化測試-輸入中文 - 一次填坑記 ''' # 3.匯入模組 from appium import webdriver import time desired_caps = {} desired_caps['platformName'] = 'Android' #android的apk還是IOS的ipa desired_caps['platformVersion'] = '8.0' #android系統的版本號 desired_caps['deviceName'] = '127.0.0.1:62001' #手機裝置名稱,通過adb devices 檢視 desired_caps['appPackage'] = 'com.taobao.taobao' #apk的包名 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome' #apk的launcherActivity desired_caps['unicodeKeyboard'] = True #使用unicodeKeyboard的編碼方式來發送字串 desired_caps['resetKeyboard'] = True #將鍵盤給隱藏起來 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #啟動伺服器地址,後面跟的是手機資訊 # 休眠五秒等待頁面載入完成 time.sleep(5) driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click() time.sleep(3) driver.find_element_by_id("com.taobao.taobao:id/searchEdit").click() driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys(u"北京-巨集哥")
6、小結
1、如果在輸入中文的時候,手機遇到顯示中文字元為亂碼時:
2、解決辦法:前面加上“#-*-coding:gb18030-*-” 如下圖所示:
3、還原設定
(1)當執行上面的指令碼後,發現手動去輸入時候,無法調出軟鍵盤了,如何恢復呢?
(2)開啟手機設定,找到輸入法設定選項,會發現預設的輸入法被改成appium的輸入法了。所以只需把這裡的設定,恢復成原來輸入法就OK拉。
在實現目標的路上,遇到坑很正常,比臨坑痛哭更重要的是,學會把坑填好,繼續走下去。最後祝各位小夥伴們填坑順利,人人都是填坑小能手!!!
您的肯定就是我進步的動力。支援巨集哥的朋友們和巨集哥的巨集粉記得點波 推薦 哦!!!
個人公眾號
微信群