元素識別工具: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表示成功