selenium XPATH元素定位

( 在appium基础上,使用python+Android为例 )

一 XPATH的不同写法

1 绝对定位(根据严格的父子关系定位)

"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.HorizontalScrollView/android.widget.LinearLayout/android.support.v7.app.ActionBar.Tab[4]/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.ImageView")

2 相对定位(根据条件匹配定位)

    规则1:查找匹配的元素值

               //* [@元素名=元素值 and contains(@元素名,元素值)]

    1.1)//* :查找所有元素;

    1.2)@元素名=元素值: 查询符合条件(元素名为元素值)的元素;

    1.3)contains(@元素名,元素值): 查询符合条件(元素名包含元素值)的元素;

    1.4)and: 多个条件合并查询;

my_loc=(By.XPATH,"//*[contains(@resource-id,'tv_tab_text') and @text='我的']")

    规则2:通过属性位置查找元素

               //li /*/*[1]

    2.1)// li:查找所有li属性的节点,默认取第一个;

    2.2)/* : 从上级节点获取所有下级节点。若/前无信息,则从根节点选取;

    2.3)/*[1] : 从上级节点获取第一个下级节点。若/前无信息,则从根节点选取第一个下级节点;

login_return_loc=(By.XPATH,"//*[@resource-id='android:id/content']/*/*[2]")

规则3:通过可获取节点的 父/子/兄弟节点,获取元素

               //* [@元素名=元素值]/li[1]/following-sibling::*[1]

    3.1)following-sibling::*[1]: 获取/前节点的第一个兄弟节点;             

setting_loc=(By.XPATH,"//*[@text='我的']/following-sibling::*[1]")

                //* [@元素名=元素值]/..

    3.2).. : 获取/前节点的父节点;

 

二 元素定位的封装

1 打开app,定义driver:

from appium import webdriver
import time

caps = {}
caps["platformName"] = "Android"
caps["deviceName"] = "VBJDU19404006281"
caps["appPackage"] = "com.android.contacts"
caps["appActivity"] = ".activities.DialtactsActivity"
caps["unicodeKeyboard"]=True

driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)

driver.implicitly_wait(30)

2.1 直接定位查找元素(适用于调试):

el = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.ImageView")

2.2 元素、定位方法分别使用(适用于 Page Object):

e2_loc=(By.XPATH,"/hierarchy/android.widget.FrameLayout/android.widget.ImageView")
e2=driver.find_element(*e2_loc)

你可能感兴趣的:(selenium XPATH元素定位)