這兩天屢次發(fā)現(xiàn)使用Uiautomator做輸入的時(shí)候,輸進(jìn)去的內(nèi)容不是自己想要的。研究發(fā)現(xiàn):錄制時(shí)的鍵盤字母位置和回放時(shí)的字母位置不同了。其實(shí),這種情況在安全性比較高的App上經(jīng)常會遇到。譬如:招商銀行輸密碼的安全鍵盤,某網(wǎng)站登錄頁密碼欄等。這種技術(shù)手段肯定是值得贊美的,但是同時(shí)給咱們的自動化測試帶來了不便。為了提高用例執(zhí)行的準(zhǔn)確性,原先依賴Uiautomator獲取鍵盤坐標(biāo)的方法就顯得比較low了;下面提供一種經(jīng)研究后覺得可行的思路來優(yōu)化一下。
圖像分割、查找
鍵盤字母所在的位置始終是Uiautomator賴以執(zhí)行的核心,這點(diǎn)不變;微調(diào)的是錄制方法和回放方法多了圖像處理這個(gè)環(huán)節(jié),看下圖:

多出來的環(huán)節(jié)均針對下面這種界面進(jìn)行操作:(為了保護(hù)隱私,找了一個(gè)普通的參照物)

錄制中:先將鍵盤按鈕拆分成一系列的小圖標(biāo),每一個(gè)圖標(biāo)均有自己的唯一名稱作為標(biāo)識,每一個(gè)圖標(biāo)的中心點(diǎn)坐標(biāo),左上角至右下角的坐標(biāo)均記錄在案;當(dāng)鍵盤被手指觸碰后,根據(jù)觸碰點(diǎn)位置所枚舉出來的最大值與下列圖標(biāo)某個(gè)中心坐標(biāo)位置進(jìn)行綁定,進(jìn)而找到點(diǎn)擊的“目標(biāo)圖”;


回放中:就沒有太多可以說的了。因?yàn)榕c之前文章中提到思路和算法一致;就是通過小圖比大圖找到在位于大圖中的坐標(biāo)位置,然后將新坐標(biāo)交給Uiautomator或者機(jī)械手去點(diǎn)擊,然后再斷言就可以了;
最后,該思路并非是對應(yīng)移動端浮動鍵盤的唯一解;在此拋磚引玉,歡迎大家一起前來討論,共同解決難題!^_^