App⾃动化-appium⾃动化
⼤家好。我是⼩蔡:
Web⾃动化讲完了。接下是移动端⾃动化。
移动端有:ios和安卓两⼤主流操作系统。
1.移动端⾃动化:(主流⼯具介绍)
Robtium:
是⼀款安卓的⼀款开源⾃动化测试框架,不⽀持跨平台,⽀持Java语⾔
Macaca:由阿⾥爸爸开发⾃动化解决⽅案,使⽤平台:pc端。安卓。Ios,⽀持语⾔:java,python,nodejs
Appium:是⼀个⾃动化测试开源⼯具,⽀持iOS和android平台上的移动原⽣应⽤、移动Web应⽤和混合应⽤。Appium是⼀个跨平台⼯具,它允许测试⼈员使⽤同样的接⼝、基于不同的平台写⾃动化测试代码,⼤⼤增加了测试套件间代码的复⽤性。
Appium特点:开源
移动原⽣应⽤:是指那些⽤iOS或者android sdk写的应⽤;
移动web应⽤:是指那些使⽤移动浏览器访问的应⽤,appium⽀持iOS的safari和android上的chrome;
混合应⽤:是指原⽣代码封装在⽹页视图(原⽣代码和web内容交互)。
⽀持跨平台,windos,linux,macos
⾃动化框架原理:
Python-------->appium服务器----(adb)---⼿机:appiumbootstrap.jar
Appium-client
通讯⽅式:发送http请求
需要环境:安卓SDK ,JDK
appium服务器安装:
需要配置SDK路径和JDK路径
Appiun-client-python安装
Adb⼯具原理:adb客户端,adb的服务器,adb守护进程
2.Adb常⽤命令:
Adb debices 查看⼿机的设备id名称以及状态,pffline(关闭)/device(在线)
Adb strat-server 启动
Adb kill-server 关闭
获取包名和界⾯名(为以后移动⾃动化获取界⾯定位元素打下基础)
包名:app包名,通过app包名来区分不同的app,app包名是唯⼀
界⾯名:相当于web页⾯当中的链接地址,app当中,每⼀个界⾯都有⼀个名字
操作步骤:
1.在⼿机或者模拟器开打app
Adb shell dumpsys window windows | grep(linux)/findstr(win) mFocusedApp #获取当前打开的包名和界⾯名称。
Adb shell dumpsys window|findstr/grep”usedApp”
2.通过aapt dump badging+app安装包路径+⽂件名称
PS:推荐代码启动app端的时候使⽤aapt获取包名和界⾯名 app安装:adb install app路径+app安装包名称
app卸载:adb uninstall 包名
上传:将电脑上的⽂件上传到⼿机
Adb push 电脑上的⽂件路径远端⼿机的路径(根⽬录) 下载:从⼿机下载⽂件到本地
unicode在线工具 Adb pull ⼿机的⽂件路径电脑的⽂件夹路径
查看⽇志信息:
定位问题:
Adb logcat 来查看相关的⽇志信息
可以使⽤管道符将⽇志信息输出到⽂本⽂件中
Adb logcat > ⽂件名.log
App启动速度命令(性能测试)
Aab shell am start -w 包名/界⾯名
3..Appium基础:
使⽤hello Appium
能够使⽤appium启动任意应⽤程序
能够了解“前置代码”各项参数含义
前置代码(如下)#导包
From appium import webdriver
Import time
Desired_caps=dict()
#平台的版本⼤⼩写⽆所谓
Desired_cpas[‘platformName’]=’Android’
#平台版本号
Desired_cpas[‘platformVersion’]=5.1
#设备名称IOS 不能乱写安卓可以乱写
Desired_cpas[‘deviceName’]=’可以随便叫’
#可以打开的应⽤程序(包名)
Desired_cpas[‘’appPackege]=’com.adbroid.setting’
#要打开的界⾯(界⾯名称)
Desired_cpas【appActivity】)=’.Settings’
#⼀个地址,⼀个字典
参数含义:
1python代码会访问本机appium 4723的⼀个端⼝
2python会访问本机appium服务器,并获取driver对象 3appium会将driver对象转化为post七⽜
4appium服务接收到会发情给⼿机
appium的基础API:
在脚本内启动其他app
应⽤场景:
#脚本内启动app
#参数:
appPac kag e:要打开的程序的包名
appActivity:要打卡的程序的界⾯名
Driver.start_activity(appPackage,appActiity)
你需要使⽤adb命令去获取包名和界⾯名称
获取app的包名和界⾯名称
⽅法:
#获取包名
Driver.current_package
#获取界⾯名
Driver.current_activity
关闭app和驱动对象
#关闭当前操作app,不会关闭驱动对象
Driver.close_app()---会退出到桌⾯。
#关闭驱动对象,同事关闭所有关联的app
Driver.quit()-----会杀死driver驱动对象。
安装和卸载以及是否安装app
⽰例:判断某APP是否已经安装
如果安装,就卸载,如果不安装,就安装。代码如下 if driver.is_app_installed(“包名”)
ve_app(“包名”)
Else:
Driver.install_app(“包名”)
将应⽤置于后台(模拟按HOME键)
app放置到后台⼀定时间再回到前台,模拟热启动
参数:
Seconds:后台停留多少秒
⽅法
Driver.background_app(5)
新⼯具:
UIAutomatorViewer的使⽤
定位元素的时候必须根据元素的相关特征来进⾏定位,⽽UIAutomatorViewer就是⽤来获取元素特征的,如:⽕狐浏览器的⼩⿏标
1. 进⼊sdk⽬录下的⽬录
mac在tools/bin⽬录下,打开UIAutomatorViewer
windows在tools⽬录下,打开UIAutomatorViewer.bat
操作步骤:
1. 打开安卓模拟器
2. 启动待测app
3. 点击UIAutomatorViewer左上⾓Device Screenshot
4. 点击希望查看的控件
5. 查看右下⾓Node Detall相关信息
Ps:⾃动打开的命令窗⼝不要关
UIAutomatorViewer闪退
点击获取元素报错---
解决⽅案:adb kill-server
adb start-server
元素定位操作API
应⽤场景:
操作步骤:
1. 打开UIAutomatorViewer⼯具
2. 打开模拟器或真机
3. 通过UIAutomatorViewer⼯具获取想要操作元素Node Detail信息
4. 通过元素定位API进⾏定位
5. 对元素进⾏相关操作
Ps:元素的定位基于当前屏幕范围内的可见元素
定位⼀个元素【掌握】:
应⽤场景:进⾏输⼊。进⾏点击。获取内容
id操作⽅法:
#通过id定位⼀个元素
#参数id_value:元素resource-id属性值
#返回值:
定位到单个元素
Driver.find_element_by_id(id_value)
class操作⽅法:
#通过class定位⼀个元素
#参数id_class:元素class属性值
#返回值:
定位到单个元素
Driver.find_element_by_id(id_class)
xpath操作⽅法:
#通过xpath定位⼀个元素
#参数xpath_value:元素content-desc属性值
#返回值:
定位到单个元素
Driver.find_element_by_xpath(xpath_value)
代码⽰例:
Search_button=Driver.find_element_by_id(“元素id”)
Search_button.click()
Serach_button.send_keys(“输⼊值”)
Ps:尽量唯⼀素的元素
定位⼀组元素【掌握】:
应⽤场景:
和定位⼀个元素相同,但是想要批量的获取某个相同特征元素,使⽤⼀组元素的⽅式更加⽅便⽅法名:
id操作⽅法:
#通过id定位⼀组元素
#参数id_value:元素resource-id属性值
#返回值:
定位到元素列表
Driver.find_elements_by_id(id_value)
class操作⽅法:
#通过class定位⼀组元素
#参数id_class:元素class属性值
#返回值:
定位到元素列表
Driver.find_elements_by_id(id_class)
xpath操作⽅法:
#通过xpath定位⼀组元素
#参数xpath_value:元素content-desc属性值
#返回值:
定位到元素列表
Driver.find_elements_by_xpath(xpath_value)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论