​5.1 Capability介绍

5.1.1 什么是Capability

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

PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
capabilities = {}
capabilities['platformName'] = 'Android' #设置平台
capabilities['platformVersion'] = '4.1' #系统版本
capabilities['deviceName'] = '127.0.0.1:62001' #设备id
capabilities['autoLaunch'] = 'true' #是否自动启动
capabilities['app'] = PATH('../apps/mukewang.apk' )#安装包路径,放在该py文件的目录下)
capabilities['appPackage'] = 'cn.com.open.mooc' #包名
capabilities['appActivity'] = 'cn.com.open.mooc.aindex.splash.MCSplashActivity' #启动的activity
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', capabilities)

  

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

5.1.2 Capability的作用

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

5.2 常用Capability配置讲解

5.2.1 公用Capability

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

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

5.2.2 Android独有Capability

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

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

5.2.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")

5.3 Capability实战

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

 def testCase(platformName,platformVersion,deviceName,app,appPackage,appActivity,port):
PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
desired_caps = {}
desired_caps['platformName'] = platformName #设置平台
desired_caps['platformVersion'] = platformVersion #系统版本
desired_caps['deviceName'] = deviceName #设备id
desired_caps['autoLaunch'] = 'true' #是否自动启动
desired_caps['app'] = PATH(app)#安装包路径,放在该py文件的目录下)
desired_caps['appPackage'] = appPackage #包名
desired_caps['appActivity'] = appActivity #启动的activity
self.driver = webdriver.Remote('http://localhost:%s/wd/hub', desired_caps) % port

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

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

Appium python自动化测试系列之Capability介绍(五)的更多相关文章

  1. Appium python自动化测试系列之移动自动化测试前提(一)

    1.1 移动自动化测试现状 因为软件行业越来越发达,用户的接受度也在不断提高,所以对软件质量的要求也随之提高,当然这个也要分行业,但这个还是包含了大部分.因为成本.质量的变化现在对自动化测试的重视度越 ...

  2. Appium python自动化测试系列之appium环境搭建(二)

    ​2.1 基础环境搭建 当我们学习新的一项技术开始基本都是从环境搭建开始,本书除了第一章节也是的,如果你连最基础的环境都没有那么我们也没必要去说太多,大概介绍一下: 1.因为appium是支持andr ...

  3. Appium python自动化测试系列之元素的定位(六)

    ​6.1 常用定位方法讲解 对象定位是自动化测试中很关键的一步,也可以说是最关键的一步,毕竟你对象都没定位那么你想操作也不行.所以本章节的知识我希望大家多动手去操作,不要仅仅只是书本上的知识,毕竟这个 ...

  4. Appium python自动化测试系列之认识Appium(四)

    ​4.1界面认识 在之前安装appium的时候说过我们有两种方法安装,也就有两种结果,一种是有界面的,一种是没有界面的,首先我们先讲一下有界面的,以及界面有哪些东西. 首先看第一幅图,如果你的是win ...

  5. Appium python自动化测试系列之Android UIAutomator终极定位(七)

    android uiautomator text定位 可能有人不知道为什么说android uiautomator是终极定位,而且android uiautomator和appium有什么关系呢?如果 ...

  6. Appium python自动化测试系列之等待函数如何进行实战(九)

    ​9.1 等待函数的使用 9.1.1 为什么要使用等待函数 我们在做自动化的时候很多时候都不是很顺利,不是因为app的问题,我们的脚本也没问题,但是很多时候都会报错,比如一个页面本来就有id为1的这个 ...

  7. Appium python自动化测试系列之Android知识讲解(三)

    ​3.1 ADB工具讲解 3.1.1 什么是ADB呢? 我们不去解释官方语言的翻译,给大家说一个通熟易懂的说法,ADB我理解为他就是电脑和手机连接的桥梁.此连接不是充电的连接,大家不要混淆,说他是一个 ...

  8. Appium python自动化测试系列之滑动函数封装实战(八)

    8.1 什么是函数的封装 教科书上函数的封装太官方,我们这里暂且将函数的封装就是为了偷懒把一些有共性的功能或者一些经常用的功能以及模块放在一起,方便我们以后再其他地方调用.这个只是个人的理解所以大家懂 ...

  9. Appium python自动化测试系列之页面滑动原理讲解(十)

    10.1.1 页面滑动原理分析 在页面滑动查找章节我们就讲了滑动的知识点,只是不知道大家是否有认真练习以及去理解,如果你认真练习.理解了那么我相信这一章节的东西不用看也能够完成,下面我们还是简单分析一 ...

随机推荐

  1. c++ 的语法方面的问题

    1.字符串string  中 ""和null的区别 答:举个例子,你老妈让你去打瓶酱油.你要是空手去了,你就是带着null去的.你要是带着空瓶子去的,你就是呆着“”去的.希望你能理 ...

  2. 病毒(bzoj 2938)

    Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  3. 【CF1027A】Palindromic Twist(模拟)

    题意:输入T组字符串,每个字符串都必须改变一次,每个字母改变的规则是变成相邻的字母,字母a只能变b,z只能变y,判断改变后的字符依旧是否能够变成回文串 n<=1e2 思路: #include&l ...

  4. AC日记——爱情之路 codevs 2070

    2070 爱情之路  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description yh非常想念他的女朋友小y,于是他 ...

  5. 重复造轮子之RSA算法(一) 大素数生成

    出于无聊, 打算从头实现一遍RSA算法 第一步, 大素数生成 Java的BigInteger里, 有个现成的方法 public static BigInteger probablePrime(int ...

  6. css查缺补漏2

    15.布局流程 一.确定页面的版心; 二.确定页面中的行模块,以及每个页面中的列模块 三.制作HTML结构 例:.top+.banner+(.main>.left+.right)+.footer ...

  7. Codeforces Gym 100431B Binary Search 搜索+组合数学+高精度

    原题链接:http://codeforces.com/gym/100431/attachments/download/2421/20092010-winter-petrozavodsk-camp-an ...

  8. String,StringBuffer,StringBuilder源码分析

    1.类结构 String Diagrams StringBuffer Diagrams StringBuilder Diagrams 通过以上Diagrams可以看出,String,StringBuf ...

  9. JavaWeb过滤器.监听器.拦截器-?原理&区别

    过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西:拦截器可以简单理解为“拒你所想拒”,关心你想要拒绝掉哪些东西,比如一个BBS论坛上拦截掉敏感词汇. 1.拦截器是基于java的反射机制,过 ...

  10. Scut游戏服务器免费开源框架--快速开发(1)

    Scut快速开发(1) 1        开发环境 需要安装的软件 a)        VS2010开发工具(.Net Framework 4.0以上) 2        HelloWorld 2.1 ...