Appium依據xpath擷取控制項執行個體隨筆

來源:互聯網
上載者:User

標籤:

如文章《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 通過指定選擇集合的位置獲得控制項依照我的實踐和理解,通過這樣的方式擷取控制項是不靠譜的,起碼存在兩個問題。
  • 問題1:控制項在集合中的位置是不可控的。
        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

 

作者

自主部落格

CSDN

天地會珠海分舵

http://techgogogo.com


服務號:TechGoGoGo

掃描碼:

tp=webp" style="max-width:100%; margin:0px; padding:0px; height:auto!important; word-wrap:break-word!important; width:auto!important; visibility:visible!important">

http://blog.csdn.net/zhubaitian




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.