前言
每次自己写pageobject定位元素对象太繁琐,格式都差不多,只是换个定位方法,这种就可以才有模板的方式,批量生成pageobject定位元素对象的模板
python里面生成模板有两个模块可以选择:templet和mako
简单来说,本篇实现的目的是用代码去自动生成代码,做到代码自动化
接着上一篇讲:appium+python自动化49-yaml管理定位元素
jinja2简介
1.jinja2官方文档:官方文档
jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用。
- 相对于Template,jinja2更加灵活,它提供了控制结构,表达式和继承等。
- 相对于Mako,jinja2仅有控制结构,不允许在模板中编写太多的业务逻辑。
- 相对于Django模板,jinja2性能更好。
- Jinja2模板的可读性很棒。
2.pip安装jinja2
pip install jinja2
3.在jinja2中,存在三种语法:
- 控制结构 {% %}
- 变量取值 {{ }}
- 注释 {# #}
templetpage模板
1.新建一个templetpage,不用弄后缀,目录格式如下
2.打开文件在里面写入以下模板
# -*- coding: utf-8 -*-
from page import tools
pages = tools.parseyaml()
def get_locater(clazz_name, method_name):
locators = pages[clazz_name][\'locators\']
for locator in locators:
if locator[\'name\'] == method_name:
return locator
{% for page, locators in page_list.items() %}
class {{page}}:{% for locator in locators %}
{{locator}} = get_locater(\'{{page}}\', \'{{locator}}\'){% endfor %}
{% endfor %}
提取yaml数据
生成pages.py文件
实现效果
1.运行tools.py脚本会自动在当前脚本目录生成一个pages.py文件,如下
# -*- coding: utf-8 -*-
from page import tools
pages = tools.parseyaml()
# 上海-悠悠 QQ交流群:330467341
def get_locater(clazz_name, method_name):
locators = pages[clazz_name][\'locators\']
for locator in locators:
if locator[\'name\'] == method_name:
return locator
class HomePage:
城市选择 = get_locater(\'HomePage\', \'城市选择\')
首页搜索 = get_locater(\'HomePage\', \'首页搜索\')
class LoginPage:
微信登录 = get_locater(\'LoginPage\', \'微信登录\')
手机号登录 = get_locater(\'LoginPage\', \'手机号登录\')
其它登录 = get_locater(\'LoginPage\', \'其它登录\')
QQ = get_locater(\'LoginPage\', \'QQ\')
微博 = get_locater(\'LoginPage\', \'微博\')
账号密码 = get_locater(\'LoginPage\', \'账号密码\')
输入账号 = get_locater(\'LoginPage\', \'输入账号\')
输入密码 = get_locater(\'LoginPage\', \'输入密码\')
登录按钮 = get_locater(\'LoginPage\', \'登录按钮\')
class MyPage:
我的 = get_locater(\'MyPage\', \'我的\')
请点击登录 = get_locater(\'MyPage\', \'请点击登录\')
2.可以在里面继续输入代码,测试下是不是能正常调用成功
上海-悠悠 QQ交流群:330467341