# UI自动化测试技术分享  

## 实施ui自动化的前提与意义 

### 前提:  
适用于模块功能稳定，基本不再修改  
### 意义：  
1. 可代替大部分的人工功能验证  
2. 可做机型兼容性测试  
3. 重复性的操作 

## appium原理的介绍  
![图片20](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E8%B5%B5%E8%B6%85%E8%83%BD/%E5%9B%BE%E7%89%8720.png)  
简单说：  
安装appium 客户端，将脚本写好的操作发送到appium客户端，appium分析完后再发送命令给手机执行操作  

详细的Appium的加载过程  
1. 调用Android adb完成基本的系统操作  
2. 向Android上部署bootstrap.jar  
3. Bootstrap.jar Forward Android的端口到PC机器上  
4. Pc上监听端口接收请求，使用webdriver协议  
5. 分析命令并通过forward的端口发给bootstrap.jar  
6. Bootstrap.jar接收请求并把命令发给uiautomator  
7. Uiautomator执行命令  

## appium框架的介绍  
自动化框架的来源：  
android底层用Android的instrumentation接口  ios 底层用IOS的instrument接口
appium优点：  

1. 支持Android和iOS两个客户端  
2. 如果了解selenium，使用起来会比较顺手，因为就在selenium基础上扩展的  
3. 支持app的h5页面的操作  
4. 支持多语言  

定位方法：  
id，name，class_name,xpath (selenium原有的方法)  
accessibility_id，android_uiautomator（appium扩展）  
![图片21](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E8%B5%B5%E8%B6%85%E8%83%BD/%E5%9B%BE%E7%89%8721.png) 

xpath的了解地址:  
https://blog.csdn.net/kaka1121/article/details/51811296  
android_uiautomator的了解地址:  
https://www.cnblogs.com/Mushishi_xu/p/7691820.html  
现用的框架：  
1. python语言 
2. 封装了部分方法  
3. 可生成的html报告  
4. 元素与代码分离（pageobject模式)  

## 自动化测试总结  
1. 定位、操作、验证不是难点，用例设计与用例选择是关键  
2. 运行过程中会有很多坑，不过基本都能查到解决方法  


