UI自动化中用PageObject设计模式就会发现page元素定位代码基本重复,复制黏贴,修改,所以就想到运用模板方式,批量生成page,同理也能批量生成handle。

有模板,利用配置文件ini获取类名,方法名,模板套用,生成文件。

1、编写模板文件:

文件名:template_handle_head.tmpl,template_page_body.tmpl

2、利用配置文件:

LocalElement.ini

3、用configparser 读取配置文件,替换class_name、fun_name以及option,批量生成多个page文件:

from string import Template
import configparser # 用ini里的文件获取元素生成的类--->后面再升级直接读取excel生成page跟handle下的页面
class GeneratePage:
def __init__(self):
# 元素文件
self.config_file = '..\\config\\LocalElement.ini'
# 类模板文件,模板文件最下面要空2行
self.template_path_head = '../config/template_page_head.tmpl'
self.template_path_body = '../config/template_page_body.tmpl'
# 生成文件后的地址
self.package_path = '../page/' # 自动生成类文件_page_package下的元素定位
def generate_class_file(self, class_name, list_func_name):
my_code = []
template_file_head = open(self.template_path_head, 'r')
template_file_body = open(self.template_path_body, 'r')
tmpl_head = Template(template_file_head.read())
tmpl_body = Template(template_file_body.read())
my_code.append(tmpl_head.substitute(class_name=class_name))
for func_name in list_func_name:
my_code.append(tmpl_body.substitute(func_name=func_name, option="\'" + func_name + "\'"))
return my_code # 生成文件
def write_to_file(self, file_name, code):
file_path = self.package_path + file_name + '_page.py'
class_file = open(file_path, 'w')
class_file.writelines(code)
class_file.close() # 用configparser 读取配置文件,替换class_name、fun_name以及option
def loop_generate_class_file(self):
config = configparser.ConfigParser()
config.read(self.config_file, encoding='utf-8')
list_section = config.sections()
for section in list_section:
# 文件名
file_name = section[0:section.rfind('_')]
# 类名
list_file = file_name.split('_')
class_name = "".join([name.capitalize() for name in list_file])
# 方法名集合里就是func_name以及option_name
list_func_name = config.options(section)
code = self.generate_class_file(class_name, list_func_name)
self.write_to_file(file_name, code)
print('ok') if __name__ == '__main__':
generate_code = GeneratePage()
generate_code.loop_generate_class_file()

4.查看效果图:

5、其他:handel格式也是类似,可以同样自动生成,配置文件也可以用excel等。

【Appium_python】利用Template生成对象模板_appium_元素定位/操作的更多相关文章

  1. 我是这么学习Selenium元素定位操作的

    写在前面 做web自动化测试都有体会,本质也就是通过操作页面元素对象来模拟用户操作行为,那么首先我们先找到这些元素对象,然后才能进行一系列操作. 我们得先告诉自动化工具或者说代码要操作那个元素,毕竟代 ...

  2. JS之document对象(找元素、操作内容、操作属性、操作样式及4道例题)

    document对象 一.找元素 1.根据id找 示例: <input id = "a" type="button" value="找元素&qu ...

  3. Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」

    1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...

  4. 混合元素app的H5元素定位

    问题思考 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 解决思路 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原 ...

  5. python+Appium自动化:H5元素定位

    问题思考 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 解决思路 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原 ...

  6. APP 自动化之appium元素定位(三)

    APP自动化测试关键环节--元素定位,以下我们来了解appium提供的元素定位方法! 1. id定位,id一个控件的唯一标识,由开发人员在项目中指定,如果一个元素有对应的resource-id,我们就 ...

  7. 『与善仁』Appium基础 — 17、元素定位工具(一)

    目录 1.uiautomatorviewer介绍 2.uiautomatorviewer工具打开方式 3.uiautomatorviewer布局介绍 4.uiautomatorviewer工具的使用 ...

  8. [Vue源码]一起来学Vue模板编译原理(一)-Template生成AST

    本文我们一起通过学习Vue模板编译原理(一)-Template生成AST来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vu ...

  9. JSP利用freemarker生成基于word模板的word文档

    利用freemarker生成基于word模板的word文档 freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器 ...

  10. python基础一 ------利用生成器生成一个可迭代对象

    #利用生成器生成一个可迭代对象#需求:生成可迭代对象,输出指定范围内的素数,利用生成器产生一个可迭代对象#生成器:本身是可迭代的,只是 yield 好比return返回,yield返回后函数冻结状态, ...

随机推荐

  1. Linux中 cat查询文件指定内容-并输入到指定文件内

    常用: ① cat xxx.log | grep -C 20 "查询关键字" ② grep -E '1805|1905' CloudPayment.log > out.log ...

  2. ES6-Class类上

    一.基础认知 构造方法有点类似构造函数,前面学的构造函数是模拟类的,ES6用类即可 不能直接调用Person()报错,和构造函数不同,构造函数不加new调用也不报错: 一般在constructor里面 ...

  3. SQL server数据库中nvarchar和varchar的区别

    先说结论: 存储内容含有汉字的使用nvarchar 存储内容全是英文没有汉字的使用varchar 1.varchar是非Unicode可变长度类型,nvarchar是Unicode可变长度类型. 2. ...

  4. TS补充笔记

    TS掘金笔记:https://juejin.cn/post/6872111128135073806    *为疑惑点 类型总结: 2.6.1Enum类型数字枚举设置初始值: 2.6.1.1给第一个枚举 ...

  5. Debian 迁移到新硬盘

    老硬盘 A,新硬盘 B,先把B分好区,做好格式化. 准备虚拟机一台,Linux LiveCD光盘或者可用的Linux虚拟机系统,把硬盘A B 映射成虚拟机可以使用的硬盘文件,根据LiveCD新建相应的 ...

  6. Jmeter固定吞吐量控制器Constant Throughput Timer

    控制请求的TPS,可以使用JMETER的固定吞吐量控制器Constant Throughput Timer Target throughput(in samples per minute):目标吞吐量 ...

  7. C# List 分页代码

    List<int> testList = new List<int>();for (int i = 1; i <= 23; i++){ testList.Add(i);} ...

  8. Flink Application Development DataStream API Operators Overview-- Flink应用程序开发DataStream API操作符概览

    目录 概览 DataStream转换 物理分区 任务链和资源组 翻译原文- Application Development DataStream API Operators 概览 操作符将一个或多个D ...

  9. pgsql 数据库密码登录配置

    一.postgreSQL认证文件 pg_hba.conf 配置文件pg_hba.conf的位置,通常情况下的路径是 /etc/postgresql/[VERSION]/main/pg_hba.conf ...

  10. 创建SFTP用户并指定访问目录 Linux

    1.创建登录用户及用户组   --可以根据自身磁盘挂载情况制定用户home目录 -d 选项 groupadd test1mkdir -p /data/test1 useradd test1 -g te ...