Appium是一个开源的测试自动化框架,可用于原生,混合和移动Web应用程序测试。 它使用WebDriver协议驱动iOS,Android和Windows应用程序。Appium类库封装了标准Selenium(还不熟悉Selenium的可以查看我前一篇文章带你了解Web自动化测试工具Selenium的使用)客户端类库,为用户提供所有常见的JSON格式Selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。其工作原理如下:
![98d93da92fcab6d4ddb7d5dddff45b1f.png](https://img-blog.csdnimg.cn/img_convert/98d93da92fcab6d4ddb7d5dddff45b1f.png)
首先,Appium支持多语言,因为它针对流的几种语言分别开发的相应的Appium库。好处就是我们可以选择自己熟悉的语言编写Appium脚本。其次,Appium支持多平台,包括MAC和Windows。它针对这两大平台开发了Appium-Server。最后,Appium又同时支持Android 和 iOS两个操作系统。这就使得Appium变得非常灵活。这个工作原理同Selenium一样的,Selenium也是 Selenium-Client =》 Selenium-Server =》 浏览器 这样的流程。
本文章聚焦于Android APP的自动化测试。先来看下最终效果(这里我使用的终端设备是Android 模拟器):
![40f2a0d37e5d082b6436b4d1947ff9c9.gif](https://img-blog.csdnimg.cn/img_convert/40f2a0d37e5d082b6436b4d1947ff9c9.gif)
可以看到,Appium会自动打开APP,自动点击按钮,自动输入用户名密码登录,自动选择题目选项,最后提交等全过程,均无需人工干预。
接下来我们看下代码是怎么写的,当然,要运行这个单元测试,必须要先下载Appium并启动Appium-Server:
/**
从中我们可以看到,基本用法同Selenium差不多,一样也是通过id(这个id指的是Android控件的id)、className(className指的是Android控件的完整类名)等来定位元素,那么问题来了,这个又不是网页,没法通过F12来检查元素,我们也没有Android APP源码,要如何知道控件id是什么呢?
这里就要用的Appium本身自带的元素检查器了。启动一个检查器会话,填写待连接设备的信息,启动会话,同时设备也要打开APP进入到目标页面:
![ea461d8af41f52c1969fb6f204d3e248.png](https://img-blog.csdnimg.cn/img_convert/ea461d8af41f52c1969fb6f204d3e248.png)
这里就可以看到整个页面的结构,点击某个元素,例如用户名输入框,可以看到,其id为org.javamaster.fragmentlearning:id/username,className为android.widget.EditText,text内容为
用户名等等关于这个元素的所有信息:
![804fe9f1892f533a23c5d5573f96eebe.png](https://img-blog.csdnimg.cn/img_convert/804fe9f1892f533a23c5d5573f96eebe.png)
所以我们的login方法就可以这么写了:
public
anticipateExam()方法同理分析。
最后如果不想每次运行单元测试之前都要先启动Appium的话,可以用npm命令npm install -g appium安装一个Appium-Server,然后测试类这样写:
public
此外Appium也可以操纵WebView(假设APP源码已调用WebView.setWebContentsDebuggingEnabled(true)方法打开了WebView的调试模式),这里可以看下效果:
![f024bdf27e7558a54b172d261b10f71c.gif](https://img-blog.csdnimg.cn/img_convert/f024bdf27e7558a54b172d261b10f71c.gif)
可以看到,Appium在WebView打开的网页里自动输入了内容,自动点击了按钮。
各位可以查看webViewSearch()方法来研究其用法,这里不再展开。
想更多了解Appium,可以查阅官方文档:
简介 - Appiumappium.io源码github地址:
https://github.com/jufeng98/online-examgithub.com