Appium-Android元素定位方式

1.通過id定位元素

resrouce-id屬性是id:



WebElement element = driver.findElement(By.id("com.oupeng.mini.android:id/search_engine_title"));

2.通過name定位元素

text屬性是name



WebElement element = driver.findElement(By.name("百度一下或輸入網址"));

 

3.通過ClassName定位元素

class屬性是classname



    WebElement element = driver.findElement(By.ClassName("android.widget.TextView"));

 

4.通過xpath定位

Appium對於xpath定位執行效率是比較低的,一般情況下儘量不用這個定位方式。


    WebElement element = driver.findElement(By.xpath("//android.widget.TextView[@index='1']"));

 

5.通過AccessibilityId定位元素



WebElement element = driver.findElementByAccessibilityId("打開標籤");


 

6.通過AndroidUiAutomator定位元素

AndroidUIAutomator是一個強有力的元素定位方式,它是通過Android UIAutomator類庫去找元素,可以選擇id、name、className作爲傳入的字符串

WebElement element =driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"com.oupeng.mini.android:id/search_engine_title")");

 

7.web應用元素定位

7.1使用chrome-devtools

    在PC瀏覽器地址欄輸入:chrome://inspect/#devices

在移動端打開一個網頁,就可以在PC瀏覽器頁面中看到如下圖


接下來點擊”inspect”,你會發現彈出一個新窗口,如圖:


通過此圖大家可以看到手機屏幕上的頁面已經PC機上顯示了,你可以看到手機wap頁面源碼以及UI界面。

如果DevTools窗口打開後是一片空白的,那是由於被牆的緣故。

在hosts文件中加入以下內容:64.233.162.83  chrome-devtools-frontend.appspot.com

保存之後,在CMD中輸入:ipconfig /flushdns,然後再重新打開就可以了,操作方式和google瀏覽器中一樣,點擊探針去探元素


通過name定位:

WebElement element = driver.findElement(By.name(“word”));

 

7.2 chrome F12模式

打開PC chrome瀏覽器,點擊F12,點擊toggle device toolbar,刷新下網頁就可以實現了,可以切換設備型號及屏幕的大小。



7.3定位混合應用元素

混合應用是原生APP+webview組成的,可以簡單的理解爲一個原生app的外殼,內部全是html頁面。在處理這樣的app的定位的時候 需要先定位原生APP上的按鈕或者鏈接,然後點擊按鈕或者鏈接,然後經過appium提供的方法,進入webview頁面,通過之前介紹的定位工具和方法進行元素定位了。如果說你的android版本小於4.4,那麼你需要使用Selendroid模式來作爲測試引擎,在測試初始化的時候需要設置該capability。如果你的android版本大於等於4.4,那麼Appium作爲測試引擎,然後通過chromedriver來處理webview。如果你使用的是APPIUM測試引擎,調試WebView需要滿足安卓系統版本爲Android 4.4+已上,並且需要在你的APP內配置相應的代碼,在WebView類中調用靜態方法setWebContentsDebuggingEnabled,如下:

if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {

WebView.setWebContentsDebuggingEnabled(true);

}

進入webview的操作:

複製代碼
//這裏使用driver.getContextHandles();獲取app的handles,原生應用會有一個handle,webview也會有一個handle

Set<String> contexts = driver.getContextHandles();

for(String cotext:contexts) {

    System.out.println(context);

//會打印出  NATIVE_APP(原生app handle)和WEBVIEW_com.example.testapp(webview的 handle)

}

//進入webview中

driver.context((String) contexts.toArray()[1]);

//操作webview中的內容
複製代碼

這裏使用driver.getContextHandles();獲取app的所有handles,原生應用會有一個NATIVE_APP 的handle,webview也會有一個WEBVIEW_XXX_XXX_XX的handle,確定了webview的handle之後,使用:driver.context(handle的字符串)進入webview頁面

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