Python+Appium自动化测试(14)-yaml配置Desired capabilities
一,前言
在之前的appium自动化测试示例中,我们都是把构造driver实例对象的数据(即Desired Capabilities)写在业务代码里,如下:
# -*- coding:utf-8 -*-
# @author: 给你一页白纸
from appium import webdriver
desired_caps = {
"platformName": "Android",
"platformVersion": "10",
"deviceName": "PCT_AL10",
"appPackage": "com.ss.android.article.news",
"appActivity": ".activity.MainActivity",
"automationName": "UiAutomator2",
"unicodeKeyboard": True,
"resetKeyboard": True,
"noReset": True,
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
这种情况下,如果我们要更换测试机测试的话,就需要去代码里面修改这些信息,从项目维护的角度来说显然是不方便的,应该考虑将这些测试配置信息写在专门的配置文件里,使用的时候直接调用即可。
二,使用yaml文件配置Capabilities示例
目录结构如下:
![]()
config下的desired_caps.yml文件里capabilities数据如下(Python中yaml文件的读写方法点这里):
platformName: Android
platformVersion: '10'
deviceName: PCT_AL10
appActivity: .activity.MainActivity
appPackage: com.ss.android.article.news
automationName: UiAutomator2
resetKeyboard: true
noReset: true
unicodeKeyboard: true
ip: 127.0.0.1
port: 4723
common下的baseDriver.py文件中构造driver的函数如下:
# -*- coding:utf-8 -*-
# @author: 给你一页白纸
import yaml, os
from appium import webdriver
# 项目根目录路径,即android-ui-autotest文件夹的路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# capabilities配置文件desired_caps.py路径
DESIRED_CAPS_YAML_PATH = CONFIG_PATH + '/config/desired_caps'
def android_driver():
# 从desired_caps.yaml读取driver配置数据
stream = open(DESIRED_CAPS_YAML_PATH, 'r')
data = yaml.load(stream, Loader=yaml.FullLoader)
desired_caps = {}
desired_caps['platformName'] = data['platformName']
desired_caps['platformVersion'] = data['platformVersion']
desired_caps['deviceName'] = data['deviceName']
desired_caps['appPackage'] = data['appPackage']
desired_caps['appActivity'] = data['appActivity']
desired_caps['automationName'] = data['automationName']
desired_caps['unicodeKeyBoard'] = data['unicodeKeyBoard']
desired_caps['resetKeyboard'] = data['resetKeyboard']
desired_caps['noReset'] = data['noReset']
driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', desired_caps)
driver.implicitly_wait(8)
return driver
三,更新yaml文件的内容
有时候我们需要通过脚本修改yaml文件里的配置信息。比如更换了测试机,capabilities里的platformVersion、deviceName都变了,脚本自动获取新测试机的这两个参数,并更新至desired_caps.yml文件里。
更新yaml文件思路:
1,先读取需要更新的yaml文件的内容;
2,将读取内容里需要更改内容替换成新的内容;
3,再写入yaml文件。
示例代码如下:
# -*- coding:utf-8 -*-
# @author: 给你一页白纸
import yaml
def update_yaml():
with open('./config/desired_caps', 'r', encoding='utf-8') as f:
content = yaml.load(f, Loader=yaml.FullLoader)
content['platformVersion'] = 'newPlatformVersion'
content['deviceName'] = 'newDeviceName'
with open('./config/desired_caps', 'w', encoding='utf-8') as nf:
yaml.dump(data=content, stream=nf, allow_unicode=True)
Python+Appium自动化测试(14)-yaml配置Desired capabilities的更多相关文章
- python+Appium自动化:yaml配置capability
场景 学习了yaml之后就是要将capability的各项参数值与代码分离开. 先创建一个capability.yaml文件,把各项参数存放在其中,然后用load()进行读取. 例子: capabil ...
- Appium移动自动化测试-----(七)Desired Capabilities
Desired Capabilities Desired Capabilities 在启动 session 的时候是必须提供的. Desired Capabilities 本质上是以 key valu ...
- python+Appium自动化:Capability配置简介
Capability配置简介 desired capability的功能是配置Appium会话. Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的 ...
- Python+Appium自动化测试(15)-使用Android模拟器(详细)
做APP的UI自动化测试时,我们往往会使用真机跑自动化测试脚本,因为这样才是最真实的使用场景.但前期调试脚本的话,可以先使用模拟器,这样相对更加方便. 不推荐使用Android SDK里自带模拟器,太 ...
- Python+Appium自动化测试(1)-appium环境搭建
用python+appium做appUI自动化测试,系统为Windows.首先是JDK与Android SDK的安装与环境变量的设置. 一,安装JDK,配置JDK环境变量 1,下载jdk jdk8官网 ...
- Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法
在appium自动化测试脚本运行的过程中,因为网络不稳定.测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待 ...
- python+appium自动化测试(一)-----环境搭建
基础背景: windows7系统 +python3.4版本 环境搭建目标: 使用python编写app自动化测试脚本并成功执行. 搭建步骤: 1.安装python3,安装步骤详见:https:// ...
- Python+Appium自动化测试(13)-toast定位
一,前言 在app自动化测试的过程中经常会遇到需要对toast进行定位,最常见的就是定位toast或者获取toast的文案进行断言,如下图,通过定位"登录成功"的toast就可以断 ...
- Python+Appium自动化测试(2)-appium连接真机启动app
app自动化测试的第一步,是启动被测app.appium环境搭建好后,我们就可以连接真机启动app了.环境为windows,Appium1.18.0,Android手机,被测app为今日头条app,让 ...
随机推荐
- vue3.0 加载json的“另类”方法(非ajax)
问题 加载json一定要用ajax的方式吗? 最近学习vue3.0,在实现一个功能的时候发现一个问题-- 写代码的时候,需要的json太长.太多,和代码放在一起太混乱.看代码总有翻来翻去,又没有&qu ...
- 20190917-02Linux网络配置 000 003
重启网络 最后reboot重启系统 继续ping 自己的window电脑的ip ctrl+C结束 继续在windows电脑上ping虚拟机上的linux系统
- 10行实现最短路算法——Dijkstra
今天是算法数据结构专题的第34篇文章,我们来继续聊聊最短路算法. 在上一篇文章当中我们讲解了bellman-ford算法和spfa算法,其中spfa算法是我个人比较常用的算法,比赛当中几乎没有用过其他 ...
- TIKTOK 美国制裁
今天在B站上看了沈教授和李自然说关于TIKTOK对于美国的声明采取的做法的一些看法.其实对于他们的看法,我觉得没有对错之分.正像两个新发的观点,在没有得到历史的验证前,谁也不会承认谁错了.更多的是两个 ...
- VUE常用问题hack修改
vue-router router这里踩的坑主要是组件的重用.构建单页面大型应用的话,肯定要开启组件的缓存的,因为一般会要求后退的时候不要重新加载页面,而且要记住原始的滚动位置.首先,引入router ...
- Javaweb中的请求路径的相关总结
重定向和转发相对路径和绝对路径问题 注意:转发和重定向的URLString前有加 / 为绝对路径 反之为相对路径 1.假设通过表单请求指定的Url资源 action="LoginServ ...
- pycharm写的代码提交到git上,提示需要merge失败时解决办法
当遇到pycharm代码提交需要合并报错时 原因:pycharm目录和git中目录冲突了 解决办法:1.先在git仓库中创建一个文件夹,比如day1 2.然后在pycharm中update一下,可以看 ...
- time模块:时间戳和格式化好的时间表示方法及互相转换方法
1.导入time模块 import time 2.获取当前时间的时间戳 time.time() 3.获取当前格式化好的时间 time.strftime(想要获取的格式) 4.时间戳和格式化 ...
- Node.js使用npm安装模块太慢,解决办法
转自 淘宝 npm 地址: http://npm.taobao.org/ 如何使用 有很多方法来配置npm的registry地址,下面根据不同情境列出几种比较常用的方法.以淘宝npm镜像举例: 1.临 ...
- Linux实战(3):升级最新内核
# 先查看一下当前内核版本 uname -r # 升级内核 rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch. ...