app自动化——appium原理与JsonWP协议

一、Appium 原理

二、JsonWP 协议分析

2.1、什么是 W3C

  • W3C 是一个组织(中文:万维网联盟)
  • 这个组织是专门负责统一 WEB 相关的各种标准,定义了很多 WEB 通讯的标准
  • 注意:不是一个标准,是很多标准,比如:html 的结构, css 表现,js 行为等等
  • WWebDriver 是 W3C 制定的标准协议之一
  • webdriver

2.2、协议分析

Method  URI Template    Command
// 一次/session 的post 请求,代码创建了一个新的session --代表自动化的开始
POST    /session                    New Session
DELETE  /session/{session id}           Delete Session
...
POST    /session/{session id}/element       Find Element
POST    /session/{session id}/elements      Find Elements

三、JsonWP 手工模拟

3.1、模拟session创建

curl -l -H "Content-type: application/json" -X POST -d '{"desiredCapabilities":{"platformName": "Android","deviceName": "emulator-5554","platformVersion":"6.0","appPackage":"com.tencent.wework","appActivity":".launch.LaunchSplashActivity","noReset":"true"}}' 'http://127.0.0.1:4723/wd/hub/session'

3.2、模拟session_id获取

先使用命令:`curl 'http://127.0.0.1:4723/wd/hub/sessions'`  获取session 包含的信息内容,从中找到session_id 
session_id=$(curl 'http://127.0.0.1:4723/wd/hub/sessions' \ | awk -F\" '{print $6}')

3.3、模拟element_id元素ID获取

// 获取 element 元素
Hogwarts $ element_id=$(curl -X POST http://127.0.0.1:4723/wd/hub/session/$session_id/elements --data-binary '{"using":"xpath", "value":"//*[@text=\"通讯录\"]"}' -H "Content-Type: application/json;charset=UTF-8" \ | awk -F\" '{print $6}')

3.4、模拟元素属性获取

// 获取元素 text 文本属性
Hogwarts $ curl http://127.0.0.1:4723/wd/hub/session/$session_id/element/$element_id/attribute/text

3.5、模拟元素属性获取

// 获取元素 text 文本属性
Hogwarts $ curl http://127.0.0.1:4723/wd/hub/session/$session_id/element/$element_id/attribute/text

四、总结

  • webdriver 是 W3C 定义的协议标准之一
  • webdriver 定义一系列与app 通讯的接口,支持多语言
  • 可以通过shell 模拟自动化操作的动作