selenium定位和appium定位区别
Selenium定位:
1.id(html id 唯一)
2.name定位
3.class定位
4.xpath定位
Appium定位:
1.id(app项目 不唯一)定位
2.name定位不支持
3.class定位支持
4.xpath定位(不推荐),不支持绝对路径定位,支持相对路径定位
5.列表定位
注意:
1.某些元素,使用Appium无法直接识别,只能使用UiAutomatorViewer工具(Android SDK)进行识别
2.UiAutomatorViewer工具和appium inspector不能同时使用
Android8.1以后SDK tools自带的uiautomator无法直接识别机器界面信息
解决方式:
1.截取uix资源文件
adb shell uiautomator dump /sdcard/screen.uix
adb pull /sdcard/screnn.uix F:/ui/screen.uix
2.截图
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png F:/ui/screen.png
打开uiautomator导入即可
install_uninstall.py
# -*- codeing = utf-8 -*-
# @Time : 2022/3/25 15:14
# @Author :su
# @File : install&uninstall.py
# @Software : PyCharm
from appium import webdriver
from time import sleep
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '9'
desired_caps['deviceName'] = '127.0.0.1:62025'
#安装app
desired_caps['app'] = r'F:\kaoyan3.1.0.apk'
desired_caps['appPackage'] = 'com.tal.kaoyan'
desired_caps['appActivity'] = 'com.tal.kaoyan.ui.activity.SplashActivity'
desired_caps['noReset'] = 'false'
# webdriver对象连接appium服务端
kydriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
# is_app_installed 判断app是否安装的方法
sleep(2)
if kydriver.is_app_installed("com.tal.kaoyan"):
print("安装成功")
else:
print("安装失败")
sleep(2)
# remove_app 卸载app的方法
kydriver.remove_app("com.tal.kaoyan")
print("自动卸载成功")
print("安装卸载一次")
cancel_skip.py
# -*- codeing = utf-8 -*-
# @Time : 2022/3/25 15:51
# @Author :su
# @File : cancel_skip.py
# @Software : PyCharm
from appium import webdriver
from time import sleep
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '9'
desired_caps['deviceName'] = '127.0.0.1:62025'
#安装app
desired_caps['app'] = r'F:\kaoyan3.1.0.apk'
desired_caps['appPackage'] = 'com.tal.kaoyan'
desired_caps['appActivity'] = 'com.tal.kaoyan.ui.activity.SplashActivity'
desired_caps['noReset'] = 'false'
# webdriver对象连接appium服务端
kydriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
# 需要等待时间
kydriver.implicitly_wait(3) #隐式等待
# 取消按钮
kydriver.find_element('id','android:id/button2').click()
kydriver.find_element('id','com.tal.kaoyan:id/tv_skip').click()
脚本优化
1.脚本尽量放在函数/方法中,可反复调用
2.app项目,有些元素可能出现,可能不出现,使用try…except…else…
# -*- codeing = utf-8 -*-
# @Time : 2022/3/25 15:51
# @Author :su
# @File : cancel_skip.py
# @Software : PyCharm
from appium import webdriver
from time import sleep
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '9'
desired_caps['deviceName'] = '127.0.0.1:62025'
#安装app
desired_caps['app'] = r'F:\kaoyan3.1.0.apk'
desired_caps['appPackage'] = 'com.tal.kaoyan'
desired_caps['appActivity'] = 'com.tal.kaoyan.ui.activity.SplashActivity'
desired_caps['noReset'] = 'false'
# webdriver对象连接appium服务端
kydriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
# 需要等待时间
kydriver.implicitly_wait(3) #隐式等待
# kydriver.find_element('id','android:id/button2').click() # 取消按钮
# kydriver.find_element('id','com.tal.kaoyan:id/tv_skip').click() #跳过按钮
#函数1:检查是否存在取消更新按钮并点击
def check_cancelBtn():
print("检查。。。是否有取消更新按钮")
try:
cancelBtn=kydriver.find_element('id','android:id/button2')
except:
print("取消更新按钮不存在")
else:
print("取消更新按钮存在")
cancelBtn.click()
#函数2:检查是否存在跳过按钮并点击
def check_skipBtn():
print("检查。。。是否有跳过按钮")
try:
skipBtn=kydriver.find_element('id','com.tal.kaoyan:id/tv_skip')
except:
print("跳过按钮不存在")
else:
print("跳过按钮存在")
skipBtn.click()
#验证
if __name__=='__main__':
check_cancelBtn()
check_skipBtn()