简介

  Capability又叫Appium Desired Capabilities,前边写了那么多实例代码,小伙伴可以发现一些规律,就是有一部分代码总是重复的出现在你的视线中。这部分就是对Capability的配置。那么今天给小伙伴们分享、介绍和讲解一下Capability。让你知道她的来龙去脉,知道为什么代码里那么写。

1、 什么是Capability

  在讲capability之前大家是否还记得在讲log时给大家看过的启动时的日志?在我们的整个启动日志中会出现一些配置信息,其实那些信息就是capability携带的配置信息,如果我们通过代码来启动我们能够看见的配置信息如下:

  通过上面的配置信息大家可以看出,在python里面我们所讲的capability其实就是一个字典(我们这里暂且这么说,因为每个语言叫法不一样)。

2、 Capability的作用

  我们知道Capability是一个字典之后我们是否需要知道他的作用呢?我们在appium中配置app后我们能够通过log看出里面的信息都是启动的一些必要配置,通过上面的配置信息我么也能够看出capability配置的就是我们做自动化的一些必要信息。他主要是告诉server我们本次测试是浏览器还是app,是ios还是android以及android的版本信息等。如果capability不告诉server,那么server就不认识你,也就无法完成我们的自动化测试。

3、 常用Capability配置讲解

3.1 公用Capability

  如果有了解过Capability的人会发现一个问题,其实他主要分成了三部分:公共部分、ios部分、android部分,如果你android想用ios的那是不可能的,so,老老实实去了解每个平台有哪些,他们的作用是什么。下面我们介绍一些公用常用的

最常用的:

在自动化测试过程中这些公用的Capability用的时间比较多,大家需要记住,去熟悉他的用法。

3.2 Android独有Capability

  在自动化测试过程中如果你只知道常用的一些参数配置,这个是远远达不到要求,因为你不知道什么时候有什么样的突发情况发生,所以你需要了解appium所有最常用的配置参数,当然你可以掌握所有,那样更好,熟能生巧。下面我们看一下android的Capability。

这些功能仅适用于基于Android的驱动程序(例如 UiAutomator2)。

  上面的只是一些简单的列子,主要的功能是告诉大家,这些是我们经常用的,如果遇见类似的需求那么可以直接使用,也希望大家看到这里的时候自己动手去操作一下,看他执行的结果到底是怎么样。只有这样你才能算掌握,只是看一遍还是不行的。

3.3 ios独有Capability

  在我选择appium时,最主要是因为他能够同时支持ios和android,在基础参数配置中ios也有他自己的独一份,不和android一样,下面我们大概介绍一下:

  BoundleId:这个是必须的,如果不配置就无法启动ios app,这个是该app的唯一标示。eg:caps.setCapability("boundleId","ios.mooc.test"),这个只是一个简单的例子。

  autoAcceptAlerts: 这个在我们实际项目中非常实用,他就想web端的一个js弹窗,默认情况下是false,如果你的app中有类似情况建议打开。eg:caps.setCapability("autoAcceptAlerts","true")

  这些功能仅适用于XCUITest驱动程序和过时的UIAutomation驱动程序

 

4、Capability实战

  当我们知道基础的Capability 如何使用时,大家是否觉得现在我们已经就可以原原本本的照着去执行了呢?其实没错,是可以照样去执行。但是你有思考过一个问题吗?如果你的app变化了?你的package变化了?你的手机变化了?你的版本变化了等等你怎么去实现?你是不是还需要到程序里面来更改代码?low吗?要想不low我们接着往下看。

 1 # coding=utf-8
 2 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 3
 4 # 2.注释:包括记录创建时间,创建人,项目名称。
 5 '''
 6 Created on 2019-7-05
 7 @author: 北京-宏哥   QQ交流群:707699217
 8 Project:学习和使用appium自动化测试-与Capability完美懈垢之解读
 9 '''
10 # 3.导入模块
11 from appium import webdriver
12 import time
13 import os
14
15 def testCase(platformName,platformVersion,deviceName,app,appPackage,appActivity,port):
16    PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
17    desired_caps = {}
18    desired_caps['platformName'] = platformName #设置平台
19    desired_caps['platformVersion'] = platformVersion #系统版本
20    desired_caps['deviceName'] = deviceName #设备id
21    desired_caps['autoLaunch'] = 'true' #是否自动启动
22    desired_caps['app'] = PATH(app)#安装包路径,放在该py文件的目录下)
23    desired_caps['appPackage'] = appPackage #包名
24    desired_caps['appActivity'] = appActivity #启动的activity
25    self.driver = webdriver.Remote('http://localhost:%s/wd/hub', desired_caps) % port

  从上面的代码我们可以和之前的代码进行比较,大家是否发现了一些不同之处。在做自动化时我们一定要保持数据的灵活性,所以在这里我们做了一些小小的改变,我们将所有的数据都改变成了变量,变量从何而来这个我们后面可能会讲,这个会去读取配置文件。现在从代码层面来看是否要比之前的代码更有可读性呢?其实现实中并不是这样,有更高级的版本,这个后面有时间再讲。

  在代码的第11行大家注意一个问题没有,在一个字符串中间我使用了一个%s,这个在python里面代表的意思是取一个变量,这个变量是我后面跟着的 port 这个变量的值,这里唯一的有问题就是这里。

5、小结

 1、想要更详细了解的小伙们,可以看一下官方文档:

官方文档:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

  好了,今天就给小伙伴们分享到这里了,有问题加群讨论。

您的肯定就是我进步的动力。支持宏哥的朋友们和宏哥的宏粉记得点波 推荐 哦!!!

个人公众号

Appium+python自动化(十三)-  与Capability完美懈垢之解读(超详解)-LMLPHP

微信群

07-05 23:32