什么是Appium
这是一个开源的自动测试框架,可以用它来操控app,测试app功能的完美性。当然,它的作用远不止这些。如果你高兴,可以用它来收能量,签到,甚至是游戏自动化。正式学习之前 ,我希望你能明白下面Appium的工作原理。
什么是WebDriver
WebDriver的设计模式是这样的:
- Server端:即Remote Server(远程服务器),可以是任意的浏览器,当脚本启动浏览器时,该浏览器就是Remote Server,它的职责是等待Client发送请求并做出响应。
- Client端:简单来说就是我们的测试代码,测试代码中的一些行为是以HTTP请求的方式发送给被测试浏览器——Remote Server,Remote Server接受请求,执行相应操作,并在Response中返回执行状态、返回值等信息。
WebDriver工作流程是这样的:
- WebDriver启动目标浏览器,并绑定至指定端口xxxx,启动的浏览器实例将作为WebDriver的Remote Server。
- Client端通过CommandExcuter发送HTTPRequest给Remote Server的侦听端口xxxx。
- Remote Server需要依赖原生的浏览器组件(比如:chromedriver.exe)来转化浏览器的native调用。
两者有什么联系
Appium基于WebDriver模式,对比WebDriver,Appium的执行过程如下:
- PC端的测试人员将测试脚本通过json格式传递给Remote Server
- Remoserver启动了一个监听端口:1234, 同时向手机端adb push 一个bootstrap.jar/bootstrap.js的脚本,手机端通过该脚本同时监听端口1234。
- PC和移动端就通过这个端口实现了通信和交互,基于socket通信(一个封装了TCP/IP协议的接口)
- 手机端通过该端口传输的命令执行APP
- 执行完操作后通过端口返回给PC端,PC端根据返回结果做校验,同时也知道了操作是否执行成功
bootstrap里面封装了安卓和苹果的自动化测试框架UIautomato
更进一步
下面的结构图清晰的表明了Appium的执行过程,其实它只是一个中转站:脚本传递给Appium后,Appium调用UiAutomator,ADB和ChromeDriver分别进行移动设备的UI自动化,电脑端与移动设备交互和WebView类控件的操作。
可以说,没有了Appium,上面的过程依旧成立
WebDriver跳过Appium获取element_id的代码如下:
curl -H "Content-Type: application/json;charset=UTF-8"\http://127.0.0.1:4723/wd/hub/session/$session_id/elements \--data-binary'{"using":"xpath","value":"//*[@class=\"android.widget.Toast\ "]"}'