Uiautomator--Uiselector元素定位
一、UiSelector作用
? 按照一定的條件(例如控件的text值,資源id),定位界面上的元素。UiSelector對象的最終目的是去構造一個UiObject對象。
?
二、元素定位
?
1、根據text定位:
| 函數返回值 | 函數體 | 說明 | 用法 |
| UiSelector | text(String text) | 根據“控件text屬性的內容”構造出UiSelector對象 | 例如,一個控件text的值是“發現”,UiSelector s = new UiSelector().text("發現"); |
| UiSelector | textContains(String text) | 根據“控件text屬性包含的內容”構造出UiSelector對象 | 同上例子:UiSelector s = new UiSelector().textContains("現"); |
| UiSelector | textMatches(String regex)? | 根據“控件text屬性正則表達式的內容”構造出UiSelector對象 | 正則表達式語法參考網上資料即可。 |
| UiSelector | textStartsWith(String text) | 根據“控件text屬性開始的內容”構造出UiSelector對象 | 同上例子:UiSelector s = new UiSelector().textStartsWith("發"); |
比較常用,準確度也比較高,中文查找的時候,有時候text元素是中文的,比如例如,一個控件text的值是“發現”,UiSelector s = new UiSelector().text("發現");此時運行的時候可能會報錯?“UiOjbectNotFoundException” ,這時候只要把項目的編碼格式改為utf-8就可以了。
?
2、根據description構造:
| UiSelector | description(String desc) | 根據“控件content-desc屬性的內容”構造出UiSelector對象 |
| UiSelector | descriptionContains(String desc) | 包含** |
| UiSelector | descriptionMatches(String regex) | 正則 |
| UiSelector | descriptionStartsWith(String desc) | 以**開始 |
同text的用法基本一致,也是比較靠譜的一種方式。
?
3、根據資源id:
| UiSelector | resourceId(String id) | 根據資源id獲取對象,例如:UiSelector s = new UiSelector().resourceId("com.tencent.mm:id/b8m") |
| UiSelector | resourceIdMatches(String regex) | 根據資源id的正則表達式獲取對象 |
?
4、根據類:
1)UiSelector?className(String? className):
根據控件的類名來找到UiSelector對象。如圖
這時候會出現問題:
因為一般Android布局的時候,同樣的控件類名都是一樣的。
因此我在微信的登錄界面調用:?UiSelector s =?new UiSelector().className("android.widget.TextView"),它得到的就是我左上開始算第一個class名稱為“android.widget.TextView”的控件。
2)UiSelector?instance?(int instance):
上面提到的假如我們想獲取屏幕上電話號碼的那個TextView使用這樣方法,就可以使用instance:
UiSelector s =?new UiSelector().className("android.widget.TextView").instance(1);
3)UiSelector?index(int index):
用法和上面的instance差不多,谷歌的原文說這個方法是unreliable的,推薦使用instance方法。
4)UiSelector?childSelector(UiSelector?selector):
有的時候假如子控件不好獲得,而其父控件比較好獲得的時候,我們通常采用這樣的方式,例如下面:
如圖,LinearLayout就是ImageView和EditText的父控件,當子空間text、resource-id為空的時候,這種時候子控件定位比較困難。很明顯,父控件id已經給定,那我們就可以先定位到父控件,再定位到子控件這種方法。
在它的父控件的childSelector方法中傳入一個帶有一定特征的UiSelector對象,即可得到子控件
UiObject wx_input=?new?UiObject(new?UiSelector().className("android.widget.RelativeLayout").childSelector(new?UiSelector().className("android.widget.EditText")));?
5)UiSelector?fromParent(UiSelector?selector):
有的時候父控件也不好獲得,而是同級的控件(同屬一個parent)比較好獲取,那么使用這樣方法,還拿上面的舉例:
我們先得到EditText的UiSelector對象:UiSelector s1 = new UiSelector().resourceId("com.tencent.mm:id/axc");
得到和它同樣一個父控件的ImageView的UiSelector對象:UiSelector s2 = fromParent(?new UiSelector().className("android.widget.ImageView") );
?
?
?
?
?
?
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/WXBai/p/6232795.html
總結
以上是生活随笔為你收集整理的Uiautomator--Uiselector元素定位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSP常用Form表单控件
- 下一篇: 微信开发 :WeixinPayInfoC