Appium根據xpath擷取控制項執行個體隨筆,appiumxpath
如文章《Appium基於安卓的各種FindElement的控制項定位方法實踐》所述,Appium擁有眾多擷取控制項的方法。其中一種就是根據控制項所在頁面的XPATH來定位控制項。
本文就是嘗試通過自己的實驗來嘗試對Appium如何用xpath來定位控制項做一個闡述,當中如有不對的地方敬請大家指出。
1. 背景本文嘗試使用的實驗對象是SDK內建的NotePad應用執行個體,假設已經有兩個Notes分別是“note1”和“note2”添加到Notepad上面,我們要做的就是嘗試用xpath的方法來定位“note2”這個ListView下面的TextView控制項。注意介面上有3個TextView類型的控制項:
- 最上面的作為整個ListView的Title文本為“Notes”的TextView,Index為0
- 中間的文本為“note2”的TextView,Index也是0
- 最下面的文本為“note1”的TextView,Index是1
2. xPath擷取控制項方式2.1 通過判斷控制項屬性擷取控制項控制項的所有屬性都可以用作判斷,比如它的text,index,resource-id是否clickable等,例如:2.1.1 通過文本尋找目標控制項
el = driver.findElementByXPath("//android.widget.TextView[contains(@text,'note2')]"); assertThat(el.getText(),equalTo("note2"));2.1.2 通過index尋找目標控制項如果我們像下面的方式使用index為0來尋找控制項note2,那麼將會失敗,因為該xpath只是說“我要尋找頁面上android.widget.TextView類型的index為0的控制項“,但如背景所說我們事實上有3個TextView控制項,其中最上面的和中間的控制項他們的Index都是0.所以最終獲得的控制項其實是Appium第一個找到的最上面文本為”Notes“的TextView。
el = driver.findElementByXPath("//android.widget.TextView[contains(@index,0)]"); assertThat(el.getText(),equalTo("note2"));那麼我們就要想辦法加多點路徑,讓xpath能分辨出需要的是下面的index為0的TextView,而不是上面的。觀看的UIAutomatorViewer控制項的分層結構,發現這兩個TextView是從LinearLayout開始分叉的,所以我們應該從該路徑開始通過數組下標指定我們需要的是”在LinearLayout下面的第二個FrameLayout下面的ListView下面的Index為0的TextView:
el = driver.findElementByXPath("//android.widget.LinearLayout[1]/android.widget.FrameLayout/android.widget.ListView/android.widget.TextView[contains(@index,0)]"); assertThat(el.getText(),equalTo("note2"));2.1.3 通過其他屬性尋找目標控制項TBD,這些就不一一列舉了,參照以上兩個樣本進行實現就可以了
2.2 通過指定選擇集合的位置獲得控制項按照我的實踐和理解,通過這種方式擷取控制項是不靠譜的,起碼存在兩個問題。
el = driver.findElementByXPath("//android.widget.TextView[1]"); assertThat(el.getText(),equalTo("note2"));以上的例子我原意是想把UIAutomatorViewer裡面的上中下3個TextView中的中間那個給找出來,但結果返回來給我的確實最上面的那個“Notes”。
- 問題2:通過增加路徑層數限制尋找指定元素集合不起效。
el = driver.findElementByXPath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout/android.widget.ListView/android.widget.TextView[0]"); assertThat(el.getText(),equalTo("note2"));以上例子我本意是想通過增加父路徑的限制來表明“我想要的控制項是ListView下面的那兩個TextView控制項中的第一個”,但返回給我的是“An unknown server-side error occurred while processing the command",感覺是越界了的樣子。2.4 xpath用法官方手冊至於其他非主流獲的通過xpath取控制項的方式,請參考xpath官方手冊中文版:http://wenku.baidu.com/link?url=tLdn9X4ucgmzYyKj4dpsgSDbshXEw6W8BTyqQAXd0kTMY6lBQqLiIL9FHtcZmdIeO8o5ZKV-fzlw96mFgvmWZ-qz35EPObyv8hKLTuyxbv3
appium python xpath 定位問題,新手問題
按照你的想法,在ListView前面的那個LinearLayout
應該為LinearLayout[1]\ListView[0],至於原因,想想數組的調用
xpath的擷取,如果是網頁端的很方便
用chrome, 選中你要擷取的元素右鍵滑鼠,審查元素。然後在開發人員視窗中,定位到的代碼處,右鍵滑鼠,有個copy xpath,點擊即可
公司限制,莫法給你圖片示範了