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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

appium java 点击坐标_appium定位元素java篇【转】

發布時間:2024/9/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 appium java 点击坐标_appium定位元素java篇【转】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、關于沒有name,沒有ID的元素的定位---通用篇

解題思路:

因為沒有name,id;其實剩下的選擇已不多,要么xpath,要么className。xpath木有好印象(穩定性不高,加之1.0x后需要寫全路徑,相當崩潰),我決定十分個人色彩的建議使用className。

具體方法:

用className獲取所有該類型的元素;

根據元素的位置確定元素的index;

獲取目標元素。

示例:

List lis = driver.findElementsByClassName("android.widget.ImageView");//獲取ImageView的所有元素

WebEelement targetEle = lis.get(0);//獲取列表中第一個元素

進階:

你可以自己定義一個className的常量,然后封裝個方法,提供大家使用:

public List getAllImges(){

List lis = driver.findElementsByClassName(AndroidClassName.IMAGEVIEW);

return lis;

}

使用的時候,就只需要調用此方法就可以了

此方法的好處:通吃的方法,基本可解決定位的問題;能解決多語言(自然語言)的困擾;

缺點:因為系統需要去獲取List,就目前來看,運行效率不是很高,那直接是可以用肉眼看的到的速度在跑。。。

2、關于沒有name,沒有ID的元素的定位---特用篇

因為是特用,所以需要對頁面元素做進一步的分析,找出其中的特性。這些特性主要為className,index,以及clickable等屬性。

場景1:同一個頁面有10個ImageView對象,而我們的目標元素的index為4,而同為ImageView且index為4的頁面只有2個。那我們就可以根據這2個條件來組合查詢條件,提高效率。

示例:

List lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+"android.widget.ImageView"+").index(4)");

基于這個場景可以封裝一個方法:

public List getElementsByClassAndIndex(String classname,int index){

List lis =null;

lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+classname+").index("+index+")");

return lis;

}

場景2:同一個頁面有10個ImageView對象,而其中index為4的有5個,而這時我們發現我們的目標元素的是clickable的。然后review頁面發現,同時滿足上述條件的只有2個。那么。。。

示例:

List lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+"android.widget.ImageView"+").index(4).clickable(true)");

同樣可以封裝一個方法:

public List getElementsByClassAndIndexAndClickable(String classname,int index){

List lis =null;

lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+classname+").index("+index+").clickable(true)");

return lis;

}

場景3:在分析頁面元素的時候發現,頁面相對比較簡單,而且其中只有目標元素的index為4.

示例:

driver.findElementByAndroidUIAutomator("new UiSelector().index("+index+")");

同樣得到一個方法

public WebElement getElementByIndex(int index){

return driver.findElementByAndroidUIAutomator("new UiSelector().index("+index+")");

}

3、關于輸入框有默認text,且當你選中時,不會清空的清空的處理。

類似的情況,用element.clear()是沒有效果的。那怎么辦呢? 不急,appium提供了很多的操作,直擊不行,我們就上組合拳。

示例:

public void clear(WebElement el){

el.click(); //選中輸入框

driver.sendKeyEvent(123);//將光標移到最后

String txt = el.getText(); //獲取字符串長度

for(int i=0;i

driver.sendKeyEvent(67);//一個個的刪除。。。。。

}

}

4、關于UiAutomator無法識別的元素

整體思路:不要忘了咱的手機是可以點擊的。

獲取相對坐標,點擊,就這么簡單。(不用絕對坐標是保證程序能在不同的分辨率下運行)

下面一起討論下相對坐標的獲取:找一個頁面,這個頁面上有相關的元素的位置與目標位置類似,或者根據這些元素能獲取到目標的大致位置。

上段代碼,幫助理解:

public List getFileMngPoint(){

List list = new ArrayList();

WebElement scrol = driver.findElementByClassName(AndroidClassName.HORIZONTALSCROLL);

List imgs = scrol.findElements(By.className(AndroidClassName.IMAGEVIEW));

//以上僅獲取類似位置的元素

Point e0 = getCenterPoint(imgs.get(0));

Point e1 = getCenterPoint(imgs.get(1), imgs.get(2));

Point e2 = getCenterPoint(imgs.get(3));

Point e4 = getCenterPoint(imgs.get(2),imgs.get(3));

Point e5 = getCenterPoint(getElementsByClassAndIndexAndClickable(AndroidClassName.IMAGEVIEW, 0).get(4));

//以上獲取元素的中心坐標,相關方法是自己寫的

list.add(e0);

list.add(e1);

list.add(e2);

list.add(e4);

list.add(e5);

return list;

}

總結

以上是生活随笔為你收集整理的appium java 点击坐标_appium定位元素java篇【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

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