appium教程_1.基础概念认知
前言
官网文档: http://appium.io/docs/cn/about-appium/intro/
最好自行查阅,一下多为个人总结
what
Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用
说人话就是,appium是用来搞app自动化的,可以来跑ios和android,先看基本架构:
三个部分
appium client : 其实就是各种语言的包,通过http协议跟appim-server通信,传达命令
appium server: 通过npm安装的appium server,通过appium命令启动
设备: 支持安卓,苹果手机
how
server端
通过appium命令启动server端,最简单就是执行appium,如下:
会默认启动一个4723的端口来等待client的连接
当然支持各种参数,大家可以通过appium -h来查看
client端
client端其实就是各种语言,用python为例子
# 安装client端
pip install Appium-Python-Client
# Android environment
import unittest
from appium import webdriver
desired_caps = dict(
platformName='Android'
platformVersion='10'
automationName='uiautomator2'
deviceName='Android Emulator'
app=PATH('../../../apps/selendroid-test-app.apk')
)
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
el = self.driver.find_element_by_accessibility_id('item')
el.click()
webdriver.remote就是通过http协议跟server端建立连接,desired_caps参数是指定appium连接的platform,driver;
然后通过提供的方法来传达指令,如上代码,通过accessibility_id的方式去寻找一个元素,然后点击该元素
设备
用安卓手机举例子,需要开启开发者模式,请自行百度开启
通过usb线连接手机和电脑,执行adb命令来查看手机相关信息,adb全称 android debug bridge,通过电脑端来跟手机进行交互
adb device 查看连接的设备
udid是手机的唯一标识,当多台设备的时候,就需要指定udid来识别哪台设备
连接
server端:接收client发送的指令请求,转化为可以驱动设备的语言,传递给设备
client端:主动跟server端建立连接,并发送/接口server端
设备端:接受指令,在设备上执行动作
server-设备
这块的知识还扯不清楚,个人理解如下:
server端是在电脑上的,然后通过usb线来连接设备(听过可以通过局域网实现无线连接)
安卓
安卓有两套deiver,两种底层不一样,这里只讨论最新的UIAutomator2(https://github.com/appium/appium-uiautomator2-server),旧得UIAutomator基本被淘汰了
UIAutomator2的前提是,安卓设备要是安卓5.0以上,现在的设备都9,10了的,所以目前就这玩意了
运行原理
- client端通过传递desired capabilities给appium server来创建一个session, appium server根据automationName去启动对应的driver,默认是android-driver,如下:
desired_caps = dict(
platformName='Android'
platformVersion='10'
automationName='uiautomator2' # 这里就是指定的就是uiautomator2
deviceName='Android Emulator'
app=PATH('../../../apps/selendroid-test-app.apk')
)
- appium server 就会调用appium-uiautomator2-driver,同时将uiautomator2 server的两个apk安装到测试设备上
- io.appium.uiautomator2.server.apk,执行handlers
- io.appium.uiautomator2.server.test.apk,只有一个test,用于启动server
- AppiumServlet ,管理请求的路由,将driver发过来的请求转发给对应Handler.
- Handler,调用UiAutomator V2去执行指定操作,操作的结果经AppiumResponse统一封装
- AppiumResponse,操作结果返回给appium-uiautomator2-driver,再将结果返给客户端
这上面的步骤都是可以通过appium-server的日志看到,也可以通过手机端的应用可以看到,其实安装了三个应用,除了上述的两个还有一个appium setting,用来通过adb命令来设置手机,具体可参考(https://github.com/appium/io.appium.settings)
参考资料
https://blog.imaginea.com/how-appium-uiautomator2-server-works/
https://www.jianshu.com/p/d8457a06c7b7
https://github.com/appium/appium-uiautomator2-server/wiki