appium--使用PyYAML封装Capability

简介: 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'])  # 37
print(data['spouse']['name'])  # Jane Smith
print(data['spouse']['age'])  # 25
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'])  # 15
print(data['childen'][1]['name'])  # Jenny Smith
print(data['childen'][1]['age'])  # 12


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)

相关文章
|
3月前
Appium使用UiSelector封装文本定位方法find_element_by_text
Appium使用UiSelector封装文本定位方法find_element_by_text
29 1
|
3月前
|
小程序 Android开发
Appium微信小程序自动化之开启webview调试功能方法封装
Appium微信小程序自动化之开启webview调试功能方法封装
82 0
|
3月前
Appium自动化常用adb操作封装
Appium自动化常用adb操作封装
25 0
|
3月前
|
JavaScript
Appium获取toast方法封装
Appium获取toast方法封装
21 1
|
3月前
|
测试技术
Appium自动化测试swipe滑动封装
Appium自动化测试swipe滑动封装
24 0
|
测试技术
Appium自动化框架从0到1之 测试用例封装
Appium自动化框架从0到1之 测试用例封装
93 0
|
数据安全/隐私保护
Appium自动化框架从0到1之 业务模块封装(登录页面业务操作)
Appium自动化框架从0到1之 业务模块封装(登录页面业务操作)
111 0
Appium自动化框架从0到1之 业务模块封装(登录页面业务操作)
Appium自动化框架从0到1之 基类的封装
Appium自动化框架从0到1之 基类的封装
102 0
|
测试技术
Appium自动化框架从0到1之 公共方法的封装
Appium自动化框架从0到1之 公共方法的封装
91 0
Appium自动化框架从0到1之Driver驱动的封装
Appium自动化框架从0到1之Driver驱动的封装
197 0