appium--使用PyYAML封装Capability
前戏
YAML 语言的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。
它的基本语法规则如下。
- YAML大小写敏感;
- 使用缩进代表层级关系;
- 缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格)
# 表示注释,从这个字符一直到行尾,都会被解析器忽略。
YAML 支持的数据结构有三种。
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
数组
一组连词线开头的行,构成一个数组。
- Cat
- Dog
- Goldfish
转为 python 如下。
[ 'Cat', 'Dog', 'Goldfish' ]
对象
对象的一组键值对,使用冒号结构表示。
animal: pets
冒号后面一定要有空格
转为 JavaScript 如下。
{ animal: 'pets' }
python读取yaml
安装PyYAML库
pip install PyYAML
数据场景:
Tom Smith37岁,他有一个妻子Jane Smith,25岁,另外他有两个孩子,一个叫Jimmy Smith,15岁。另外一个叫Jenny Smith,12岁
family.yaml
name: Tom Smith
age: 37
spouse:
name: Jane Smith
age: 25
childen:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age: 12
python文件读取
import yaml file = open('family.yaml', "r")
data = yaml.load(file, Loader=yaml.FullLoader)
print(data)
# {'name': 'Tom Smith', 'age': 37, 'spouse': {'name': 'Jane Smith', 'age': 25}, 'childen': [{'name': 'Jimmy Smith', 'age': 15}, {'name': 'Jenny Smith', 'age': 12}]} print(data['name']) # Tom Smith
print(data['age']) #
print(data['spouse']['name']) # Jane Smith
print(data['spouse']['age']) #
print(data['childen']) # [{'name': 'Jimmy Smith', 'age': 15}, {'name': 'Jenny Smith', 'age': 12}]
print(data['childen'][0]['name']) # Jimmy Smith
print(data['childen'][0]['age']) #
print(data['childen'][1]['name']) # Jenny Smith
print(data['childen'][1]['age']) #
python数据类型转为yaml格式
上面我们使用了yaml.load从yaml里读取,转为python的类型,我们可以使用dump把python类型的转为yaml类型
import yaml lis = ['name', 'age', 'job']
dic = {'IT':'test', 'dev':'ui'} print(yaml.dump(lis))
print(yaml.dump(dic))
结果:
- name
- age
- job IT: test
dev: ui
把python的数据类型写入yaml文件
import yaml lis = {'name': 'Tom Smith', 'age': 37, 'spouse': {'name': 'Jane Smith', 'age': 25},
'childen': [{'name': 'Jimmy Smith', 'age': 15}, {'name': 'Jenny Smith', 'age': 12}]} dic = {'IT': 'test', 'dev': 'ui'}
with open('family.yaml', 'w') as f:
f.write(yaml.dump(lis))
f.write(yaml.dump(dic))
结果:
将Capability封装成yaml配置文件
desired_caps.yaml
platformName: Android # 注意要有空格
platforVersion: 9.1.1
deviceName: 127.0.0.1:62001
app: F:\App\csca3.1.0.apk
appPackage: com.csca
appActivity: com.csca.ui.activity.SplashActivity
noReset: False
ip: 127.0.0.1
port: 4723
读取配置文件yaml里的内容
import yaml
from appium import webdriver file = open('desired_caps.yaml', 'r')
data = yaml.load(file, Loader=yaml.FullLoader) desired_caps = {}
desired_caps['platformName'] = data['platformName']
desired_caps['platforVersion'] = data['platforVersion']
desired_caps['deviceName'] = data['deviceName']
desired_caps['app'] = data['app']
desired_caps['appPackage'] = data['appPackage']
desired_caps['appActivity'] = data['appActivity']
desired_caps['noReset'] = data['noReset'] driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', desired_caps)
appium--使用PyYAML封装Capability的更多相关文章
- Appium的Java封装
文章出处 http://blog.csdn.net/niubitianping/article/details/52612211 一.为什么需要封装? 封装的本意就是为了方便.简洁. 二.Androi ...
- Appium脚本(3):sendkey(封装capability)
输入中文注意添加这个配置,否正中文输入不了desired_caps['unicodeKeyboard'] = "True"desired_caps['resetKeyboard'] ...
- appium自动化测试框架——封装获取设备信息类
在上一节中,我们已经解决了如何在python中执行cmd,并获取执行结果.下面就小小实战一下,获取设备信息. 一.思路 1.windows上获取设备信息的方法 输入dos命令“adb devices” ...
- Python +appium 封装desired_caps模块
使用python+appium做android的自动化测试时,首先需要启动appium服务,然后连接上手机,配置如下: desired_caps = {"platformName" ...
- Appium自动化测试框架
1.在utils包中创建一个AppiumUtil类,这个类是对appium api进行封装的. 代码如下: package utils; import java.net.MalformedURLExc ...
- 『与善仁』Appium基础 — 10、Appium基本原理
目录 1.Appium自动化测试架构 2.Appium架构图 3.Session说明 4.Desired Capabilities说明 5.Appium Server说明 6.Appium Clien ...
- 手机自动化测试:appium源码分析之bootstrap九
手机自动化测试:appium源码分析之bootstrap九 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣, ...
- Appium环境搭建-精简版
Appium自动化环境准备 安装配置JDK 下载Android SDK并配置环境变量 安装模拟器或连接真机 安装appium desktop 安装python和pycharm (开发语言和开发工具) ...
- Appium学习笔记4_元素定位方法
Appium之元素定位,如果对Android上如何使用工具获取页面元素有问题的,请转战到这:http://www.cnblogs.com/taoSir/p/4816382.html. 下面主要是针对自 ...
随机推荐
- 使用 Hbuilder 连接手机调试移动端项目
点击界面上的浏览器右侧的倒三角. 弹出列表以后,点击最后一行 “设置web服务器...”.继续弹出,点击右下角的“外置Web服务器设置”. 点新建. 弹出框后,填入“名称”和“浏览器运行U ...
- 克隆系统后如何重新清除SID
为什么要清除SID? SID(Security Identifiers,安全标识符)是Windows中标识用户.组和计算机的唯一的号码,Windows操作系统通过SID对计算机和用户进行识别.用户的权 ...
- Centos7下安装Relion
目录 1.Virtual Box 1.1下载Virtual Box 1.2安装Virtual Box 2.Centos7 2.1下载Centos7 2.2安装Centos7 2.2.1配置虚拟机 2. ...
- [译]基于ASP.NET Core 3.0的ABP v0.21已发布
基于ASP.NET Core 3.0的ABP v0.21已发布 在微软发布仅仅一个小时后, 基于ASP.NET Core 3.0的ABP v0.21也紧跟着发布了. v0.21没有新功能.它只是升级到 ...
- 【OCR系列之一】字符识别技术总览
最近入坑研究OCR,看了比较多关于OCR的资料,对OCR的前世今生也有了一个比较清晰的了解.所以想写一篇关于OCR技术的综述,对OCR相关的知识点都好好总结一遍,以加深个人理解. 什么是OCR? OC ...
- python TKinter的主窗口运行程序完毕后,怎么让其自动关闭
如题: 在pycharm 调试Tkinter程序的时候,关闭右上角的X 实际上并未退出进程,长期以往 再大的内存也会被耗尽. 一般就是下面的代码: """ from tk ...
- Springboot整合单元测试
概述 对于简单易懂的小项目而言,可以不适用单元测试对平时开发没有什么影响,但是对于大型项目,单纯的依赖 “手点功能测试”, 那简直就是灾难,好了,说道这里,应该明白测试的一个重要性了,,,接下来,我们 ...
- 【洛谷2791】幼儿园篮球题(第二类斯特林数,NTT)
[洛谷2791]幼儿园篮球题(第二类斯特林数,NTT) 题面 洛谷 题解 对于每一组询问,要求的东西本质上就是: \[\sum_{i=0}^{k}{m\choose i}{n-m\choose k-i ...
- this泛指函数的上下文
this泛指函数的上下文 当前函数运行的类型上下文.
- Django之Django简介,开发环境搭建,项目应用创建
软件及Django框架简介 软件框架 一个软件框架是由其中各个软件模块组成的: 每一个模块都有特定的功能: 模块与模块之间通过相互配合来完成软件的开发. 软件框架是针对某一类软件设计问题而产生的. M ...