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);
    }

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调试开启即可

posted on 2018-10-02 13:32  singleSpace  阅读(457)  评论(0编辑  收藏  举报