【appium】根據xpath定位元素

來源:互聯網
上載者:User

標籤:

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"));

 

【appium】根據xpath定位元素

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.