appium_元素識別

元素識別工具:ADT目錄下   D:\ruanjianpath\android-sdk\android-sdk-windows\tools\

uiautomatorviewer.bat 雙擊打開

1、元素定位:

resource id > findElementById  推薦使用 按id的方式,但不唯一

class > findElementByClassName  最好不用

text > findElemnetByAndroidUIAutomator("text(\"文字\")")

conten-desc > findElementByAccessibilityId

xpath > findElementByXPath(全路徑) 一般進行反推,通過要定位的元素去反推它的父節點,然後編寫完整的路徑;

以輸入框點擊爲例:

由於相鄰父節點沒有resource-id,所以在向上找父節點;

driver.findElementByXPath("//android.widget.TextSwitcher/parent::*/parent::*[@resource-id='com.xiaomi.shop.plugin.homepage:id/fragment_search_view']").click();

 

2、元素操作

click() 點擊

sendKeys()  輸入

clear()  清空

pressKeyCode(Android_KeyCode.KEYCODE_3) 模擬鍵盤操作輸入3

swipe(startx, starty, endx, endy, duration) 滑動,從一個點到另一個點,duration爲時長,單位毫秒

可以通過getsize的方式獲取手機屏幕的寬和高,然後再去計算;

爲了讓appium更好的兼容不同分辨率的設備,一般會在執行滑動前先獲取屏幕的分辨率;

int width = driver.manage().window().getSize().width;

int height = driver.manage().window().getSize().height;

driver.swipe(width/2,height*3/4, width/2, height/4, 1000);

注意:appium在最新的java client庫廢棄了swipe等函數,而換成了TouchAction函數,非必要情況先不用。

 

---------------------------------------------------------------

實現一個搜索業務:

業務步驟:

啓動app->跳過廣告頁-》點擊搜索框-》在搜索框中輸入文本-》點擊搜索按鈕

通過UI Automator Viewer獲取元素位置

業務代碼實現如下:

//--------------下面是實現頁面的業務操作
        //點擊首頁的跳過按鈕
        driver.findElementById("com.xiaomi.shop:id/skip").click();
        //點擊搜索按鈕
        driver.findElementById("com.xiaomi.shop.plugin.homepage:id/fragment_search_swither").click();
        //跳轉頁面後點擊搜索按鈕
        driver.findElementById("com.xiaomi.shop2.plugin.search:id/input").sendKeys("U盤");
        //點擊搜索按鈕
        //driver.findElementById("com.xiaomi.shop2.plugin.search:id/search_fragment_search_btn").click();
        driver.findElementByAndroidUIAutomator("text(\"搜索\")").click();
        //停頓時間
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  
        //關閉app
        driver.quit();

---------------------------------------------------xpath基本原則------------------------------------------------------------------------------------

用相對路徑 + 屬性的方式比較常見

//*[@resource-id="com.zhihu.android:id/title"]/..

------------------------------------用xpath定位最後一個菜單,我的-----------------------

xpath裏不支持$可以用. 來代替;

索引只支持同級目錄,不能按照找到的數量;雖然搜到了8個,但同級目錄下只有5個;注:xpath的索引是從1開始的;

或者用排序後的這種

或者用contains的方式

//*[contains(@text,"我的")]

 

---------------------xpath軸--------------------

following-sibling 與preceding-sibling 是重點

按照第5個節點去找同級目錄之前的

//android.support.v7.app.a.c[5]               //android.support.v7.app.a.c[5]/preceding-sibling::*[1]他會從當前節點向前找相鄰最近的

//android.support.v7.app.a.c[5]/ancestor::*  父輩節點展示   

-------------------------------真機----------------------------

1、開發者模式;2、USB調試;3、USB配置-RNDIS;4、模擬點擊;

能夠看到adb的狀態,並且狀態爲device表示成功

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章