appium+python自动化50-生成定位对象模板templet(jinja2)

前言

每次自己写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() 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.可以在里面继续输入代码,测试下是不是能正常调用成功

(0)

相关推荐

  • appium

    文章目录 appium 1.appium可以测试的对象 2.自动化混合APP的条件 3.总结 4.查看webview版本 5.APP面试点 6.代码部分 方式1: 设置搜索webview 方式2: 输 ...

  • 选择一个 Python Web 框架:Django vs Flask vs Pyramid

    WEB前端开发社区 昨天 Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框 ...

  • (Python)自动生成代码(方法一)

    在写某个平台的自动化脚本时,笔者把全部的操作都封装到了两个类中,page.py和commonpage.py: page.py部分代码:class BasePage(object): ''' 页面基础类 ...

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

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

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

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

  • Appium+python自动化28-name定位

    前言 appium1.5以下老的版本是可以通过name定位的,新版本从1.5以后都不支持name定位了 一. name定位报错 1.最新版appium V1.7用name定位,报错: > sel ...

  • appium+python自动化30-list定位(find_elements)

    前言 有时候页面上没有id属性,并且其它的属性不唯一,平常用的比较多的是单数(element)的定位方法,遇到元素属性不唯一,就无法直接定位到了. 于是我们可以通过复数(elements)定位,先定位 ...

  • appium+python自动化31-android_uiautomator定位

    前言 appium的前身就是封装android的uiautomator这个框架来的,所以uiautomator的一些定位方法也可以用 一. text 1.通过text文本定位语法 > new U ...

  • appium+python自动化32-android_uiautomator定位进阶版

    前言 上一盘介绍uiautomator的定位方式都是类似这种'new UiSelector().xxx("xxx")',看起非常长,我也记不住,这很不python.于是本篇优化了定 ...

  • appium+python自动化58-xpath定位

    基本属性定位 以淘宝app为例,定位左上角扫一扫按钮 1.可以通过text文本定位到 //*[@text='text文本属性'] # 定位text driver.find_element_by_xpa ...

  • appium+python自动化98-非select弹出选择框定位解决

    前言 遇到问题:document.getElementsByClassName(-)[0] is undefined 选择框如果是select标签的,可以直接用select专用的方法去定位点击操作.其 ...

  • Selenium2+python自动化45-18种定位方法(find_elements)

    前言 江湖传言,武林中流传八种定位,其中xpath是宝刀屠龙,css是倚天剑. 除了这八种,其实还有十种定位方法,眼看就快失传了,今天小编让失传已久的定位方法重出江湖! 一.十八种定位方法 前八种是大 ...