Appium简介和初步使用520-1

1.移动互联网架构简化图

1418970-20181001083246153-273762475.png

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

1418970-20181002093349840-355151812.png

  • automatic server : 采用当前Appium Desktop的server,默认:127.0.0.1:4723
  • custom server : 自己设置host:port/path,例如:127.0.0.1:8100/wd/hub,使用前要确定该地址可用
    <img src="https://img2018.cnblogs.com/blog/1418970/201810/1418970-20181002094547696-509307249.jpg width="500" />
  • 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相似
XCUITestiOS自动化框架
  • deciceName 设备名字,adb device获取
  • platformName 手机系统版本,iOS 12.0 Android 8.0
  • app 应用安装包路径
  • browserName 手机自带浏览器测试。Android需要关注chrome driver版本。
手机系统browserName字段
iOSSafari
AndroidChrome、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

1418970-20181002100914658-523223142.png

4.2.查找Activity

4.2.1查看启动日志

    adb shell am force-stop com.xueqiu.android 
    adb logcat -s ActivityManager|grep com.xueqiu.android 

1418970-20181002101743612-1237543751.png

#验证Activity是否正确
adb shell am force-stop com.xueqiu.android
adb shell am start -n com.xueqiu.android/.view.WelcomeActivityAlias

1418970-20181002101940883-172544369.png

4.2.2通过dumpsys

#启动应用后再输入此命令。如果未启动,没有输出。
adb shell dumpsys activity activities|grep intent |grep com.ali.money.shield --color="auto"

1418970-20181002173358205-1428687470.png

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
1418970-20181002112240560-6653856.jpg

  • node节点
  • attribute属性
  • clickable\content-desc\resource-id\text\bounds

5.2.iOS与Android的区别

  • dom属性和节点结构类似
  • 名字和属性的命名不同
    页面的全部信息通过http://localhost:4723/wd/hub/session/${SessionId}/source查看
    1418970-20181003212525663-1118337236.png

5.3.常用的操作

1418970-20181002114618850-1221256081.png

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
    1418970-20181003202758707-1456235800.png
    1418970-20181003203536339-1419293088.png

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'
1418970-20181002103017614-1655635986.png

注意:此时,只需要将开发者模式里的USB调试开启即可

1418970-20181002104147669-2093259725.png

转载于:https://www.cnblogs.com/csj2018/p/9736870.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值