前言

每次自己写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

appium+python自动化50-生成定位对象模板templet(jinja2)的更多相关文章

  1. Appium+python自动化4-元素定位uiautomatorviewer

    前言 环境搭建好了,下一步元素定位,元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. uiautomatorviewer是androi ...

  2. Appium+python自动化12-appium元素定位

    前言 appium定位app上的元素,可以通过id,name.class这些属性定位到 一.id定位 1.appium的id属性也就是通过UI Automator工具查看的resource-id属性

  3. appium+python自动化49-yaml管理定位元素

    前言 如何高效管理定位元素,这个是很有学问的问题,也是面试必问的[以下纯属个人观点,勿喷!]. 有的人用xml管理页面定位元素,这种逼格略高,但是小编认为学习成本大,贼麻烦. 有的人提到用excel管 ...

  4. Appium+python自动化12-appium元素定位【转载】

    前言 appium定位app上的元素,可以通过id,name.class这些属性定位到 一.id定位 1.appium的id属性也就是通过UI Automator工具查看的resource-id属性

  5. Appium+python自动化4-元素定位uiautomatorviewer【转载】

    前言 环境搭建好了,下一步元素定位,元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. uiautomatorviewer是androi ...

  6. Appium+python自动化

    名称 链接地址 Appium+python自动化8-Appium Python API(上) http://mp.weixin.qq.com/s/WvpT5oRrYY22avI95FuypQ Appi ...

  7. Appium+python自动化8-Appium Python API

    Appium+python自动化8-AppiumPython API   前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts conte ...

  8. appium+python自动化52-多点触控MultiAction

    前言 MultiAction是针对多点触控操作的,是TouchAction的一个补充模块 TouchAction用法参考前面的一篇:appium+python自动化33-TouchAction 多点触 ...

  9. Appium+python自动化20-查看iOS上app元素属性

    前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素 Mac版的appium1.6的 ...

随机推荐

  1. iframe的一些介绍

    iframe 元素会创建包含另外一个文档的内联框架(即行内框架) 提示:您可以把需要的文本放置在 <iframe> 和 </iframe> 之间,这样就可以应对无法理解 ifr ...

  2. swagger关闭生产访问

    通过profile注解来处理. Swagger的congif类上声明@Profile({"dev", "test"}),发布到生产上使用product的prof ...

  3. jenkins构建触发器定时任务Build periodically和Poll SCM【转载】

    转至博客:上海-悠悠 前言 跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行. 一.定时构建语法 * * * * * ( ...

  4. python语言的模块化

    在实际工程中使用的编程语言,都有(也应该有)自己的模块化方式,这是由于:一个文件不可能写的无限长,把不同性质和功能的代码放入不同的文件,再由文件组成不同的文件夹,这种方式符合人们思考和理解的习惯,不过 ...

  5. Centos7下安装破解confluence6.3

    confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki.通过它可以实现团队成员之间的协作和知识共享.现在大多数公司都会部署一套confluence与jira的结合,用作内部w ...

  6. TCP握手协议简述

    TCP握手协议简述在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器 ...

  7. sonar rule

    bug类型: 1.".equals()" should not be used to test the values of "Atomic" classes.  ...

  8. For input string: "..."

    之前在项目中通过EL表达式从cart 中取出itemPirce这个值时始终报:For input string: "${cart.itemPrice / 100}" 错误. 事故原 ...

  9. 关于DRY原则

    软件工程,模式,语言,设计思想发展到今天,说白了,所有的技巧,思想,原则归根结底都是为了这个DRY  从机器语言开始: 为了DRY,出现了汇编符号来代表指令,使开发人员不用“重复翻阅指令手册” 为了D ...

  10. HDU 1002.A + B Problem II-数组模拟-大数相加

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...