一.元素定位工具
(1)可以使用android sdk自带工具uiautomatorviewer定位,路径存在Android SDK的Tools工具下。
(2)可以使用Appiuma-desktop安装包自带的Appium-inspector工具
二者的区别:
支持平台不同:uiautomatorviewer支持andorid native;Appium-inspector不仅支持android native还支持IOS
二.元素定位方法
1.ID定位
通常就是resource-id的值,直接在uiautomatorview复制即可
2.class name
name定位直接复制text的值就是appium的name定位,不建议使用name定位,1.6以上版本已经不支持这种定位方式
3.Xpath
(1)绝对路径
(2)相对路径
详细使用参照Xpath语法
注意“/”表示直接子元素,
“//”表示子元素的子元素
例如:定位B站APP“热门”
在Inspector展示的层级关系如图所示:
如图
driver.find_element_by_xpath("//android.widget.LinearLayout[1]/\ android.view.View[@resource-id='tv.danmaku.bili:id/video_layout'][1]/\ android.widget.FrameLayout[@resource-id='tv.danmaku.bili:id/cover_layout'][1]"\ ).click()
4.AccessibilityId
在 Android 上,主要使用元素的content-desc属性
,如该属性为空,不能使用此定位方式。
5.坐标定位
一般很少用,因为屏幕分辩率发生变化,坐标点也容易发生变化
三.实战环节:
环境准备:
1.JAVA JDK 1.8
2.Android SDK
3.Appium-Desktop
4.Python 3.7
5.Pycharm
6.夜神模拟器
7.使用pip命令安装库
pip install Appium-Python-Client
完整代码如下: from appium import webdriver from selenium.webdriver.support.wait import WebDriverWait import time desired_caps = { 'platformName': 'Android', 'platformVersion': '5.1.1', 'deviceName': '127.0.0.1:62001', 'appPackage': 'tv.danmaku.bili', 'appActivity': '.ui.splash.SplashActivity' } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # time.sleep(10)强制等待 driver.implicitly_wait(10)#隐式等待是针对全部元素设置的等待时间 driver.find_element_by_id('tv.danmaku.bili:id/agree').click() driver.implicitly_wait(10) #显式等待是针对某个元素来设置的等待时间。 driver.find_element_by_xpath("//*[@resource-id='tv.danmaku.bili:id/tabs']//android.widget.FrameLayout[3]").click() WebDriverWait(driver, 10).until(lambda x: x.find_element_by_xpath("//android.widget.LinearLayout[1]/\ android.view.View[@resource-id='tv.danmaku.bili:id/video_layout'][1]/\ android.widget.FrameLayout[@resource-id='tv.danmaku.bili:id/cover_layout'][1]")) driver.find_element_by_xpath("//android.widget.LinearLayout[1]/\ android.view.View[@resource-id='tv.danmaku.bili:id/video_layout'][1]/\ android.widget.FrameLayout[@resource-id='tv.danmaku.bili:id/cover_layout'][1]"\ ).click()