appium介绍
概念:
- Appium是一个开源的测试自动化框架,可以与原生的、混合的和移动的web应用
程序一起使用。
支持平台
- ios
- xcuitest iOS9.3以上
- android
- uiautomator2/uiautomator
- Espresso
- 命令:adb shell uiautomator --help
- windows
- WinAppDriver
- Mac
- Mac Driver
- Web端
- 移动web页面
3种App
- 原生,手机系统原生的组件和原生的开发语言实现的app
- android,java/kotlin
- ios,oc/swift
- web
- HTML,CSS,JS
- 混合应用
- 原生应用兼容性差,响应快,表现流畅,web应用兼容性差,响应慢
- 原生的负责核心内容,简单的模块用web做
- Hybrid App
- Native 和web整合到一起
设计哲学
- 你没有必要为了自动化而重新编译你的应用或者以任何方式修改他
- Android/IOS系统自带框架
- 你不应该被限制在特定的语言或框架上来编写运行测试
- API调用
- 移动自动化框架在自动化接口方面不应该重新造轮子
- WebDriver
- 移动端自动化框架应该开源,不但在名义上而且在精神和实践上都要实至名归
协议
- webdriver 的json Wire Protocol
- WebDriver已经成为自动化Web浏览器的事实上的标准,并且是W3C工作草案
- Appium在webdriver上提出了mobile json wire Protocol
原理
相关资料
- APPium:http://appium.io/docs
- Appium Pro:htttps://appiumpro.com/editions
- Appium python Docs:https://appium.github.io/python-client-sphinx
- Appium Caps:http://appium.io/docs/en/writing-running-appium/caps/
常用caps
-
platformName 必选
-
deviceName 必选
-
app 安装路径
-
appActivity 页面title
- aapt dump badging apk 路径
- launchable-activity:
- aapt dump badging apk 路径
-
appPackage 包名
- aapt dump badging apk 路径
- adb shell am monitor
- adb logcat | findStr -i displayed
-
platformVersion 可选,版本不匹配会报错
-
noReset 不重置,一般是ture
-
automationName 框架名称
-
browserName 浏览器名称
-
autoWebview 开机进入webview模式(混合应用)
-
chromedriverExecutable Chromedriver版本
-
chromedriverExecutableDir
-
unicodeKeyboard 切换中文键盘,输入中文需要设为ture
-
resetKeyboard 重启键盘,输入中文需要设为ture
-
autoGrantPermissions 自动授权(各种权限)
-
adb shell pm list package 获取所有已安装的应用包名
-
adb shell cmd package
-
adb shell dumpsys activity | find “mFocusedActivity” 查看前台页面的名称
-
adb shell “dumpsys window | grep mCurrentFocus” 查看Windows当前的包名和activity
appuim运行原理
- 1.python向selenium服务器端发送一条请求,创建一个会话对象。
- 接收caps中的信息
- 2.selenium server 接收到数据,对数据进行解析和验证
- 查找adb,如果你的adb找不到(没有添加到环境变量),就会报错
- 通过adb获取设备
- 确认手机sdk api版本是否兼容
- adb操作启动app
- uiautomator 操作
- 返回操作结果响应
版本匹配
appium1.3默认是uiautomato1
appium1.4以上是uiautomato2
selenium和appium的关系
- chrom()类和Remote()类都是同一个父类webdriver
- chrom()首先初始化一个服务,然后启动一个客户端去访问接口
- appium()除了继承selenium方法,还自己封装了移动端特有的方法
- appium()中BY是MoblieBy
常见问题
- uiautomator无法启动
- 解决方案
- adb shell pm list package/instrumentation | grep uiautomator
- adb uninstall io.appium.uiautomator2.server
- adb uninstall io.appium.uiautomator2.server.test
- 重新运行
- 再不行就重新启动appium或模拟器或电脑
- 解决方案
- 脚本运行结束后一定要加driver.quit()
- 不加会造成上次会话未推出,下次会话打开,出现冲突
- adb 端口占用adb启动不了
- netstat -ano | findstr “5037”
- taskkill -f -pid 进程号