appium教程_1.基础概念认知
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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【编译技术】:解读 Babel AST Format——01
- 【编译技术】:解读 Babel AST Format——02
- PyTorch入门笔记-PyTorch初见
- ssh 连接 Linux 服务器并安装 Anaconda
- Ant Design Vue 报错:Failed to resolve directive: ant-portal的解决办法
- 小程序生成二维码海报的组件-wxa-plugin-canvas
- kbone 是什么?这可能是最好的小程序开源框架
- jQuery根据填写的input的数值导出excel表格
- 小程序根据返回值英文渲染出对应的中文
- redis灵魂拷问:聊一聊AOF日志重写
- 小程序返回的时间戳转化成时间
- JSP 报错:ReferenceError: $ is not defined
- 小程序使用 组件库 vant-weapp详细教程
- DEBUG=1 宏定义对 @weakify 和 @strongify 的影响分析
- 为什么 demangle 会失败?