Skip to content

appium 原理与 JsonWP 协议分析


目录

  • Appium 原理
  • JsonWP 协议分析
  • JsonWP 手工模拟

Appium 原理


Appium 原理


什么是 W3C

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

协议分析

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

协议手工模拟


模拟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'

模拟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}')

模拟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}')


模拟元素属性获取

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

模拟元素动作

// 完成元素的点击动作
Hogwarts $ curl -X POST http://127.0.0.1:4723/wd/hub/session/$session_id/element/$element_id/click

总结

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