Xpath定位是appium中最重要的一种定位方式,也是一种万能的定位方法,如果元素id是唯一的,xpath可以利用id属性定位;如果text属性是唯一的,xpath可以结合text属性定位 ;如果class属性唯一,xpath可以利用class属性定位。xpath也可以组合定位,如果一个元素有2个属性,通过xpath可以同时匹配两个属性,text,id,class等这些属性都能够任意组合定位。Xpath也可用实现层级定位,如果一个元素,除了class属性(class属性是一定会有的)其它属性都没有,这个时候可以找到它父元素,通过父元素定位子元素
1.Xpath利用id定位
如果元素id属性是唯一的,可以通过id属性定位 //*[@resource-id=’id属性’]
find_element_by_xpath(“//*[@resource-id=’xxx’]”)
find_elements_by_xpath(“//*[@resource-id=’xxx’]”)
示例:
from appium import webdriver
import time
from selenium.common.exceptions import NoSuchElementException
def android_driver():
desired_cap={}
desired_cap['platformName']="Android"
desired_cap['platformVersion']='8.1.0'
desired_cap['deviceName']='HONOR9X'
desired_cap['udid']='5fb5c4cc' #ip或者设备好
desired_cap['appPackage']='com.ss.android.article.news' #要启动的应用包名
desired_cap['appActivity']='com.ss.android.article.news.searchIcon2' #要启动的应用activity
desired_cap['noReset']=True #不需要重新登录
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_cap)
return driver
if __name__=="__main__":
driver=android_driver()
time.sleep(10)
try:
element=driver.find_element_by_xpath("//*[@resource-id='com.ss.android.article.news:id/c0k']")
#element = driver.find_element_by_id('com.ss.android.article.news:id/bzw')
except NoSuchElementException:
print("没有找到这个摄像元素")
else:
print("已经找到这个摄像元素了,点击他")
element.click()
当有多个元素的id值相同时,可以使用find_elements_by_xpath进行查找,使用的时候要加上角标
from appium import webdriver
import time
from selenium.common.exceptions import NoSuchElementException
def android_driver():
desired_cap={}
desired_cap['platformName']="Android"
desired_cap['platformVersion']='8.1.0'
desired_cap['deviceName']='HONOR9X'
desired_cap['udid']='5fb5c4cc' #ip或者设备好
desired_cap['appPackage']='com.ss.android.article.news' #要启动的应用包名
desired_cap['appActivity']='com.ss.android.article.news.searchIcon2' #要启动的应用activity
desired_cap['noReset']=True #不需要重新登录
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_cap)
return driver
if __name__=="__main__":
driver=android_driver()
time.sleep(10)
try:
#element=driver.find_element_by_xpath("//*[@resource-id='com.ss.android.article.news:id/c0k']")
#element = driver.find_element_by_id('com.ss.android.article.news:id/bzw')
elements=driver.find_elements_by_xpath("//*[@resource-id='com.ss.android.article.news:id/uh']")
except NoSuchElementException:
print("没有找到这个元素")
else:
print("已经找到这个元素了,点击第一个")
elements[1].click() #使用角标,点击第一个
2.Xpath利用text定位
text属性定位 如果元素text属性是唯一的,可以通过text文本定位
//*[@text=’text文本属性’]
find_element_by_xpath(“//*[@text=’xxx’]”) #通过文本属性xxx定位元素
示例:
from appium import webdriver
import time
from selenium.common.exceptions import NoSuchElementException
def android_driver():
desired_cap={}
desired_cap['platformName']="Android"
desired_cap['platformVersion']='