Appium python自動化測試系列之Android UIAutomator終極定位(七)

來源:互聯網
上載者:User

標籤:自動化   思考   工作   tom   變更   比較   屬性   png   使用   

android uiautomator text定位

可能有人不知道為什麼說android uiautomator是終極定位,而且android uiautomator和appium有什麼關係呢?如果之前寫了一些指令碼,發現有的時候一些元素不能夠很好的定位時,那麼就需要採用android uiautomator去定位,他是一種非常強有力的定位方式,原理是通過android 內建的android uiautomator的類庫去尋找元素,都直接用官方公布出來的方法去找了還能找不到嗎?

首先看我們下面的圖片:

在上面的圖片中我們不採用appium封裝好的方法,直接使用android 的uiautomator去定位結果如下:

user = new Uiobject(new UiSelector().text("請輸入手機號"))user.setText("test")

  這兩句話看不懂也沒關係,因為我們接下來講的是appium已經對他進行了封裝的方法,這裡只是讓你看一下他原始方法是怎麼做的。首先他會根據你的定位資訊new一個對象出來,然後再在你new的對象之上進行相關操作。下面我們看一下在appium中的實現方法:

 

ele = self.driver.find_element_by_android_uiautomator(‘new UiSelector().text("請輸入手機號")‘)ele.send_keys("123")

  

兩個代碼進行比較我們可以發現他們的相同之處只是最後的定位資訊是一樣的,即:new UiSelector().text("請輸入手機號")

,這句話是什麼意思呢?簡單的話就是根據一定條件來尋找元素,我們這裡的條件就是text屬性為“請輸入手機號”,再根據圖片去理解是不是很容易呢?

android uiautomator的元素定位其實和appium的定位一樣,或者說他比appium的定位方式更佳多以及更佳適用,並不是只有這一個,他也只是className、id等定位,而且還支援模糊比對進行定位,這樣是不是感覺更高大上呢?下面我們簡單介紹一下這幾種定位方式。

6.6.2 uiautomator text模糊定位

模糊定位故名思義,通過text的部分資訊就能夠進行定位,我們直接看代碼:

ele = self.driver.find_element_by_android_uiautomator(‘new UiSelector().textContains("請輸入手")‘)ele.send_keys("123")

  

在上面的代碼中我們只是將.text()的方法變成了.textContains(),在方法中傳入模糊的資料就好。看到這裡是否有人思考過一個問題,既然有類似的模糊尋找,那麼有沒有像Regex一樣的尋找呢?答案是肯定的,看我們下面的方法。

6.6.3 textMatches 正則匹配尋找

textMatches故名思義就是通過正則的來進行尋找定位,他也是通過text的屬性來進行正則匹配,我們直接看代碼:

ele = self.driver.find_element_by_android_uiautomator(‘new UiSelector().textMatches("^請輸入手.*")‘)ele.send_keys("123")

  

上面匹配的一些資訊可能一些剛做測試的小夥伴不是很瞭解,這個不要緊,下來可以搜尋一下Regex教程,稍微瞭解一下就可以。

6.6.4 uiautomator resourceID定位

resourceId定位和appium封裝好的id定位是一樣的,只是這裡將寫法變成了uiautomator的寫法而已,看下面代碼:

ele = self.driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("cn.com.open.mooc:id/et_phone_edit")‘)ele.send_keys(‘234‘)

  

通過上面的代碼和之前的代碼對比大家可能發現其實他們前面都是一樣的,只是在定位的時候發生了一些變化,text變換成了resourceID即可,也就是頁面對象屬性的資訊進行變更了,其他方法都是一樣。下面其他方法我就不浪費篇幅,只給大家做一個簡單的案例展示。

6.6.5 resourceIDMatches 定位

通過id進行正則匹配定位

ele = self.driver.find_element_by_android_uiautomator(‘new UiSelector().resourceIdMatches(".+et_phone_edit")‘)ele.send_keys(‘234‘)

  

6.6.6 uiautomator className定位通過調用android uiautomator使用className進行定位

  

ele = self.driver.find_element_by_android_uiautomator(‘new UiSelector().className("android.widget.EditText")‘)ele.send_keys(‘234‘)

  

6.6.7 uiautomator classNameMatches定位

通過className正則匹配進行定位

ele = self.driver.find_element_by_android_uiautomator(‘new UiSelector().classNameMatches (".*EditText")‘)ele.send_keys(‘234‘)

  通過上面的學習我相信大家對uiautomator的定位有一定的瞭解了,但是我想告訴大家的是這個並不是所有的,還有很多很多的定位方式,這個需要大家在以後不斷的學習中去積累,我也不可能把所有的方法都告訴大家,這裡只是給大家一個起頭,但是我希望大家在學習定位的時候不只是看appium的定位,畢竟他也是封裝的uiautomator的定位方式,所以在學習appium的同時把uiautomator去大概學習一下這個很有協助,並且對以後的提升自己以及工作中重新封裝appium有很大的協助。

Appium python自動化測試系列之Android UIAutomator終極定位(七)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.