Appium简介和初步使用520-1
1.移动互联网架构简化图
2.Appium的优势
* 多种开发模式支持 native hybrid webview
* 多平台支持 android ios
* 跨语言 java python ruby nodejs php
* 支持跨app,可以在多个app之间交互
* 不依赖源代码,可以测试第三方应用
3.Appium Desktop(包括Appium Server和Inspector)
下载地址:http://shell.testing-studio.com/download/appiumdesktop/
3.1点击🔍(Start Inspector Session),启动Inspector
* automatic server : 采用当前Appium Desktop的server,默认:127.0.0.1:4723 * custom server : 自己设置host:port/path,例如:127.0.0.1:8100/wd/hub,使用前要确定该地址可用 * Desired Capabilities 使用新的配置启动 * Saved Capabilities Sets 使用保留的配置启动 * Attach to Session 通过session启动3.2 capability常用的配置选项:
{
"platformName": "android",
"deviceName": "1661720946",
"appPackage": "com.xueqiu.android",
"appActivity": ".view.WelcomeActivityAlias"
}
3.3 其他配置
- automationName 如下:
自动化框架 | 使用场景 |
---|---|
Selendroid | <android 4.4,默认使用 |
UiAutomator | >=Android 4.4,默认使用 |
UiAutomator2 | >=Android 5.1,需要指定,获取toast时使用 |
Espresso | 谷歌退出的Android自动化框架,与Selendroid相似 |
XCUITest | iOS自动化框架 |
- deciceName 设备名字,adb device获取
- platformName 手机系统版本,iOS 12.0 Android 8.0
- app 应用安装包路径
- browserName 手机自带浏览器测试。Android需要关注chrome driver版本。
手机系统 | browserName字段 |
---|---|
iOS | Safari |
Android | Chrome、Chromium、Browser |
- newCommandTimeout appium一段时间,未收到新的命令, session会失效,默认60秒
- udid iOS手机的序列号,使用真机测试时,必须指定。使用idevice_id -l查看
- orientation 屏幕方向
- noReset 在当前 session 下不会重置应用的状态。默认值为 false。设置true后,每次启动时都会先清除应用数据
- fullReset 用例执行后,清理环境,包括卸载。
(iOS)删除所有的模拟器文件夹。
(Android) 要清除 app 里的数据,请将应用卸载才能达到重置应用的效果。在 Android, 在 session 完成之后也会将应用卸载掉。默认值为 false - dontStopAppNoReset 直接从当前应用页面开始测试,不会重启应用。要和noReset搭配使用。测试代码如下
//dontStopAppOnReset的示例,注意:要和noReset结合使用
@Before
public void setUpXueqiu() throws MalformedURLException {
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("platformName", "android");
desiredCapabilities.setCapability("deviceName", "406e8f3");
//desiredCapabilities.setCapability("automationName","UiAutomator2");
desiredCapabilities.setCapability("appPackage", "com.xueqiu.android");
desiredCapabilities.setCapability("appActivity", ".view.WelcomeActivityAlias");//activity不能忽略
desiredCapabilities.setCapability("noReset",true);
desiredCapabilities.setCapability("dontStopAppOnReset","true");
desiredCapabilities.setCapability("newCommandTimeout",1200);
URL remoteUrl = new URL("http://localhost:4723/wd/hub");
driver = new AndroidDriver(remoteUrl, desiredCapabilities);
driver.manage().timeouts().implicitlyWait(10000,TimeUnit.SECONDS);
}
@Test
public void testNotStop() throws InterruptedException {
driver.findElementByXPath("//*[@text=\"交易\"]").click();
Thread.sleep(3000);
}
- printPageSourceOnFindFailure 元素没有找到,就打印当前的page source。
更多配置信息:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
4. 获取应用的包名和活动
4.1.查看包名
adb shell am monitor
4.2.查找Activity
4.2.1查看启动日志
adb shell am force-stop com.xueqiu.android
adb logcat -s ActivityManager|grep com.xueqiu.android
```shell
#验证Activity是否正确
adb shell am force-stop com.xueqiu.android
adb shell am start -n com.xueqiu.android/.view.WelcomeActivityAlias
```
4.2.2通过dumpsys
#启动应用后再输入此命令。如果未启动,没有输出。
adb shell dumpsys activity activities|grep intent |grep com.ali.money.shield --color="auto"
4.2.3 aapt dump badging *.apk
部分应用可能找不到
5.元素控件
5.1 dom 文档对象模型Document Object Model。
dom最早应用于html和js的交互。界面的结构化描述,常见的格式为html、xml。核心元素为节点和属性。
xpath:xml路径语言,用于xml中的节点定位
appium inspector和uiautomate view为简化后的信息。
appium定位首选id、xpath、accessibityId:content-desc
- node节点
- attribute属性
- clickable\content-desc\resource-id\text\bounds
5.2.iOS与Android的区别
- dom属性和节点结构类似
- 名字和属性的命名不同
页面的全部信息通过http://localhost:4723/wd/hub/session/${SessionId}/source查看
5.3.常用的操作
1.Select Elements 选择元素
2.Swipe By Coordinates 根据坐标滑动屏幕
3.Tap By Coordinates 根据坐标点击
4.Back 返回
5.Refresh Source&Screenshot 刷新
6.Start Recording 录制脚本
7.Search For Element 根据给定的条件去寻找元素
8.Copy XML Source To Clipboard 复制结构图到剪贴板
9.Quit Session&Close Inspector 退出Inspector
10.Tap 点击
11.Send Keys 向编辑框发送text
12.Clear 清空编辑框
6.用例编写
用例基本包含引用的依赖、初始化、代码块(<font color=#458B00>测试步骤三要素:定位、交互、断言</font>)、主入口
- 启动appium
- 启动参数--session-override
- 可访问的url http://localhost:4723/wd/hub
- 准备设备
- 编写脚本
- 导入依赖
- capability设置
- 元素定位于操作
- 断言 assert
FAQ:
1.启动Inspector失败,错误如下:
An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command '/Users/chenshanju/Library/Android/sdk/platform-tools/adb -P 5037 -s 406e8f3 shell pm clear com.xueqiu.android' exited with code 1'; Stderr: 'Error: java.lang.SecurityException: PID 30088 does not have permission android.permission.CLEAR_APP_USER_DATA to clear data of package com.xueqiu.android'; Code: '1'
注意:此时,只需要将开发者模式里的USB调试开启即可