日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Uiautomator--Uiselector元素定位

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Uiautomator--Uiselector元素定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、UiSelector作用

? 按照一定的條件(例如控件的text值,資源id),定位界面上的元素。UiSelector對象的最終目的是去構造一個UiObject對象。

?

二、元素定位

?

1、根據text定位:

函數返回值函數體說明用法
UiSelectortext(String text)根據“控件text屬性的內容”構造出UiSelector對象例如,一個控件text的值是“發現”,UiSelector s = new UiSelector().text("發現");
UiSelectortextContains(String text)根據“控件text屬性包含的內容”構造出UiSelector對象同上例子:UiSelector s = new UiSelector().textContains("現");
UiSelectortextMatches(String regex)?根據“控件text屬性正則表達式的內容”構造出UiSelector對象正則表達式語法參考網上資料即可。
UiSelectortextStartsWith(String text)根據“控件text屬性開始的內容”構造出UiSelector對象同上例子:UiSelector s = new UiSelector().textStartsWith("發");

比較常用,準確度也比較高,中文查找的時候,有時候text元素是中文的,比如例如,一個控件text的值是“發現”,UiSelector s = new UiSelector().text("發現");此時運行的時候可能會報錯?“UiOjbectNotFoundException” ,這時候只要把項目的編碼格式改為utf-8就可以了。

?

2、根據description構造:

UiSelectordescription(String desc)根據“控件content-desc屬性的內容”構造出UiSelector對象
UiSelectordescriptionContains(String desc)包含**
UiSelectordescriptionMatches(String regex)正則
UiSelectordescriptionStartsWith(String desc)以**開始

同text的用法基本一致,也是比較靠譜的一種方式。

?

3、根據資源id:

UiSelectorresourceId(String id)根據資源id獲取對象,例如:UiSelector s = new UiSelector().resourceId("com.tencent.mm:id/b8m")
UiSelectorresourceIdMatches(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元素定位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。