读取ini配置文件

配置项

读取API

写入API

实战:UI 对象库

读取ini配置文件

配置项

在每个 ini 配置文件中,配置数据会被分组(比如下述配置文件中的“config”和“cmd”),每个分组中又可以指定对应的变量值。

示例:test.ini

# 定义config分组
[config]
platformName=Android
appPackage=com.romwe
appActivity=com.romwe.SplashActivity # 定义cmd分组
[cmd]
viewPhone=adb devices
startServer=adb start-server
stopServer=adb kill-server # 定义log分组
[log]
log_error=true

读取API

  • read(filename):直接读取文件内容
  • sections():得到所有的 section,并以列表的形式返回
  • options(section):得到该 section 的所有 option
  • items(section):得到该 section 的所有键值对
  • get(section,option):得到 section 中 option 的值,返回为 string 类型
  • getint(section, option):得到 section 中 option 的值,返回为 int 类型
  • getboolean()
  • getfloat()
>>> import configparser
>>>
>>> cf = configparser.ConfigParser()
>>> cf.read("e:\\db.ini", encoding="utf-8") # 读取配置文件
['e:\\db.ini']
>>>
>>> cf.sections() # 获取各分组
['config', 'cmd', 'log']
>>>
>>> cf.options("config") # 获取指定分组的所有键
['platformname', 'apppackage', 'appactivity']
>>>
>>> cf.items("config") # 获取指定分组的所有键值对
[('platformname', 'Android'), ('apppackage', 'com.romwe'), ('appactivity', 'com.romwe.SplashActivity')]
>>>
>>> cf.get("log", "log_error") # 获取指定分组及指定键的值
'true'

配置文件中的键是不区分大小写的,例如下述两种方式是等价的:

cf.get("config", "appActivity")
cf.get("config", "APPACTIVITY")

在解析时,getboolean()方法查找任何可行的值,例如以下几个都是等价的:

[log]
log_error=true
log_error=TRUE
log_error=1
log_error=yes

写入API

  • write(fp):将config对象写入至某个 .init 格式的文件
  • add_section(section):添加一个新的 section
  • set(section, option, value):对 section 中的 option 进行设置,需要调用 write 将内容写入配置文件
  • remove_section(section):删除某个 section
  • remove_option(section, option):删除某个 sction 的某个 key
 1 >>> import configparser
2 >>>
3 >>> cf = configparser.ConfigParser()
4 >>>
5 >>> cf.add_section("section1") # 添加分组
6 >>> cf.set("section1", "key1", "value1") # 添加键值对
7 >>> cf.set("section1", "key2", "value2")
8 >>>
9 >>> cf.add_section("section2")
10 >>> cf.set("section2", "key3", "value3")
11 >>>
12 >>> cf.add_section("section3")
13 >>> cf.set("section3", "key4", "value4")
14 >>> cf.set("section3", "key5", "value5")
15 >>>
16 >>> cf.remove_section("section2") # 删除指定分组
17 True
18 >>> cf.remove_option("section3", "key4") # 删除指定分组的指定键值对
19 True
20 >>>
21 >>> cf.sections()
22 ['section1', 'section3']
23 >>>
24 >>> f = open("config.ini", "w")
25 >>> cf.write(f) # 保存配置文件
26 >>> f.flush() # 刷新或关闭文件,数据才会真正写入文件
27 >>> f.close()

实战:UI 对象库

用配置文件存储页面元素的定位方式和定位表达式,做到定位数据和程序的分离。

UiObjectMap.ini

[sogou]
searchBox = id>query
searchButton = id>stb

ObjectMap.py

ObjectMap 工具类文件,供测试程序调用。

 1 from selenium.webdriver.support.ui import WebDriverWait
2 import configparser
3 import os
4 from selenium import webdriver
5
6
7 class ObjectMap:
8    
9     def __init__(self):
10         # 获取存放页面元素定位方式及定位表达式配置文件路径
11         # os.path.abspath(__file__):获取当前文件所在路径目录
12         self.uiObjectMapPath = os.path.dirname(os.path.abspath(__file__)) + "\\UiObjectMap.ini"
13         print(self.uiObjectMapPath)  # E:\eclipse-workspace\AutoTest\UI\UiObjectMap.ini
14        
15     def getElementObject(self, driver, webSiteName, elementName):
16         try:
17             # 创建一个读取配置文件的实例
18             cf = configparser.ConfigParser()
19             # 将配置文件加载到内存
20             cf.read(self.uiObjectMapPath)
21             # 根据section和option获取配置文件中页面元素的定位方式及定位表达式组成的字符串,
22             # 并使用">"分隔
23             locators = cf.get(webSiteName, elementName).split(">")
24             # 得到定位方式
25             locatorMethod = locators[0]
26             # 得到定位表达式
27             locatorExpression = locators[1]
28             print(locatorMethod, locatorExpression)
29             # 显式等待获取页面元素
30             element = WebDriverWait(driver, 10).until(lambda x: x.find_element(locatorMethod, locatorExpression))
31         except Exception as e:
32             print(e)
33         else:
34             # 找到页面元素,返回给调用者
35             return element

SoGou.py

调用 ObjectMap 工具类实现测试逻辑。

 1 from selenium import webdriver
2 import unittest
3 import time, traceback
4 from UI.ObjectMap import ObjectMap
5
6
7 class TestSoGouObjectMap(unittest.TestCase):
8    
9     def setUp(self):
10         self.obj = ObjectMap()
11         self.driver = webdriver.Firefox()
12        
13     def tearDown(self):
14         self.driver.quit()
15        
16     def testSoGouSearch(self):
17         url = "http://www.sogou.com";
18         self.driver.get(url)
19         try:
20             # 查找页面的搜索输入框
21             searchBox = self.obj.getElementObject(self.driver, "sogou", "searchBox")
22             searchBox.send_keys("WebDriver")
23             # 查找搜索按钮
24             searchButton = self.obj.getElementObject(self.driver, "sogou", "searchButton")
25             searchButton.click()
26             time.sleep(2)
27             self.assertTrue("Selenium" in self.driver.page_source, "assert error!")
28         except Exception:
29             print(traceback.print_exc())
30        
31
32 if __name__ == "__main__":
33     unittest.main()

读取ini配置文件 及 UI对象库的更多相关文章

  1. UI对象库-定位元素与程序分离

    1.前言 这几天有人问我,UI自动化测试中使用到的页面定位元素应该存放在哪里比较合适?我想说的是如果你使用的是PO设计模式设计测试用例的话,可以把定位元素存在每一个page页面,一个page存放对应的 ...

  2. Selenium WebDriver UI对象库

    UI对象库:使用配置文件存储测试页面上的定位和定位表达式,做到定位数据和程序的分离. 第一步:实现工具类Object工具类,供测试程序调用. /** * 使用配置文件存储测试页面上的定位和定位表达式, ...

  3. 转 python3 读取 ini配置文件

    在代码中经常会通过ini文件来配置一些常修改的配置.下面通过一个实例来看下如何写入.读取ini配置文件. 需要的配置文件是: 1 [path] 2 back_dir = /Users/abc/Pych ...

  4. python3笔记-读取ini配置文件

    在代码中经常会通过ini文件来配置一些常修改的配置.下面通过一个实例来看下如何写入.读取ini配置文件. 需要的配置文件是: [path] back_dir = /Users/abc/PycharmP ...

  5. Python读取ini配置文件(接口自动测试必备)

    前言 大家应该接触过.ini格式的配置文件.配置文件就是把一些配置相关信息提取出去来进行单独管理,如果以后有变动只需改配置文件,无需修改代码. 特别是后续做自动化的测试,代码和数据分享,进行管理.比如 ...

  6. bat 读取 ini 配置文件

    bat 读取 ini 配置文件 config.ini: abc=abc a=a localpath=D:\local\path .bat: @echo off setlocal enabledelay ...

  7. python读取ini配置文件的示例代码(仅供参考)

    这篇文章主要介绍了python读取ini配置文件过程示范,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 安装 pip install configp ...

  8. 【python3】configparser读取ini配置文件

    在应用过程中,发现下面这个问题: cf=configparser.ConfigParser()读取配置文件时,如果数据包含%这们析特殊符号,就会报出上面的错误,使用cf = configparser. ...

  9. Python读取ini配置文件的方式

    python configparser模块   ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...

随机推荐

  1. LayUI之数据表格扩展

    1.点击一行 选中 以下代码需要在表格渲染完成时加载. 1)当单击表格行时,把单选按钮设为选中状态 //当单击表格行时,把单选按钮设为选中状态 $(document).on("click&q ...

  2. Redis6.0.9主从搭建

    所谓主从,大家都知道主是写数据,而从是进行数据的拷贝. 1:配置 主节点 127.0.0.1 6379 从节点 127.0.0.1 6378 先将单机版的配置文件赋值两份出来,原先的配置中主要改动有: ...

  3. Go - 代码生成工具

    分享两个常用的代码生成工具: gormgen handlergen gormgen 基于 MySQL 数据表结构进行生成 3 个文件: 生成表的 struct 结构体 生成表的 Markdown 文档 ...

  4. HDOJ-6641(欧几里得+异或运算)

    TDL HDOJ-6641 关于题意,就是要找出符合f的第m大的数,而且后面还要满足异或等式. 通过观察题目,可以发现n太大了,所以不能直接枚举.当然因为m比较小,所以可以转换思路k^n,这个数最大不 ...

  5. 关于 C++ 中的强制转换 - 基础篇

    引言 假设有基类 A,包含了虚函数 func1,以及有派生类 B,继承于类 A,派生类 B 中实现了函数 func1.此时可以用 A 类型的指针指向 B 类型的对象,并用 A 类型的指针调用 B 类型 ...

  6. 漏洞复现-CVE-2016-4437-Shiro反序列化

        0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)(兼顾反弹shell的攻击机) 0x01 影响版本 Shiro <= ...

  7. JVM线上问题排查

    前言 本文介绍服务器内运行的 Java 应用产生的 OOM 问题 和 CPU 100% 的问题定位 1. 内存 OOM 问题定位 某Java服务(比如进程id pid 为 3320)出现OOM,常见的 ...

  8. 基于es实现一个简单的搜索引擎

    一.什么是es Elasticsearch是一个基于ApacheLucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库.但 ...

  9. frameset、frame和div 、iframe

    框架一般应用于首页的界面排版工作.把一个网页切割成多个页面管理.frame文件一般只包含框架的布局信息,不会包含其他内容,所有的页面效果都是在各个frameset页面内显示.他们都从属于frame文件 ...

  10. POJ_2065 SETI 【同余高斯消元】

    一.题目  SETI 二.分析 给定一个模数,一串字符串,字符串长度为N,相当于是N个方程的答案,而这N个方程中有N个未知数,要求的就是这N个未知数的值,很显然的高斯消元,遇到模数和除法,用逆元就好. ...