做自動化,元素定位是我們遇到的第一個困難。總是會有各種各樣的問題,導致我們定位不到元素。前面一篇博客也寫了元素定位的幾種方法,今天主要分享一下xpath的定位方法。
這里我們仍然拿計算器舉例。

比如我這里想去定位這個數字1的按鈕。
首先打開UIuiautomatorviewer

我們鼠標點擊一下數字7可以看到這個按鈕的位置。我們上一篇中也說到了,在元素的屬性中,class就是xpath的地址,我們是可以通過class來寫xpath的。
那么這里我們就可以寫成:
find_element_by_xpath("//android.support.v4.view.ViewPager/android.widget.LinearLayout/android.widget.LinearLayout[3]/android.widget.Button[1]")
看到這里感覺就像是剝洋蔥一樣。從外往里一層一層的剝,最終找到我們要定位的目標。
在這里需要注意的是我們在xpath定位的時候不能從最外層的整個頁面開始,那樣是會報錯的。要從包含該控件的最上層的class開始寫,什么是包含該控件的最上層元素呢?就比如這里的android.support.v4.view.ViewPager,我們點擊這個可以發現

android.support.v4.view.ViewPager實際上就是整個鍵盤的區域。然后在鍵盤的區域中對數字鍵1再進行定位。
還有就是上面我寫的是android.widget.LinearLayout[3]/android.widget.Button[1]而不是android.widget.LinearLayout[2]/android.widget.Button[0]貌似和我們的UIuiautomatorviewer獲取到的信息不一樣,那么為什么會是這樣呢?筆者其實也解釋不清楚,哈哈。只是我覺得android.widget.LinearLayout[3]/android.widget.Button[1]是去定位第三個android.widget.LinearLayout中的第一個android.widget.Button元素。我記得我在書上看到的說法是xpath中的元素定位都是從1開始而不是從0開始,所以我通過android.widget.LinearLayout[3]/android.widget.Button[1]去定位到數字1的控件。這里講的可能不對,我也在尋找答案中,找到答案后再更新過來。
