在写某个平台的自动化脚本时,笔者把全部的操作都封装到了两个类中,page.py和commonpage.py:

page.py部分代码:
class BasePage(object):
'''
页面基础类
'''
def __init__(self, driver):
self.driver = driver def find_element(self,loc):
return self.driver.find_element(*loc) #在输入框中输入文字
def input_text(self,loc,text):
self.find_element(loc).send_keys(text)

commonpage.py部分代码:
class CommonPage(BasePage):
'''平台通用的功能'''
####################################
#点击菜单
#big:第几个大菜单
#small:第几个小菜单
def click_menu(self,big):
big_menu = (By.XPATH,"//ul/li[%s]/a/span"%big)
self.click(big_menu)
sleep(2) def click_small_menu(self,small,list):
small_menu = (By.XPATH,"//ul/li[%s]/ul/li[2]"%small)
self.click(small_menu)
sleep(2)

页面的操作只要调用这两个类(大部分其实在调用commonpage类),几乎能完成全部元素的封装、简化操作流程等。类似封装页面元素部分代码:

from pages.page import BasePage
from pages import commonpage,loginpage #活动编辑-报名表界面
class act_applyPage(BasePage): #点击菜单
def goto_activity_page(self):
loginpage.LoginPage(self.driver).login_sys(username="abcd", passwd="password")
com_page = commonpage.CommonPage(self.driver)
com_page.click_menu(2,1) #点击某个tab
def click_act_apply_tab(self):
print u"点击 act_apply_tab"
compage = commonpage.CommonPage(self.driver)
compage.click_tab(5)

能看出封装页面元素的代码很多都是类似的,只是参数不同。这就引发了笔者的思考:“能不能快捷生成代码?”

上网搜索资料,大多都是使用Templat类,研究后发现达不到笔者想要结果(也有可能笔者还没掌握Templat类的使用,T-T)。

最近刚好总结了python处理配置文件的知识,想到可以用在自动生成代码这里。

大致思路是:section值可作为类名,option值可作为方法,在value中,用“,”隔开多个有用的参数,其中第一个参数是option的类型(这个类型决定用那一段代码);

先遍历sections,在每个section下,遍历{option:value}键,分析value中的类型,把对应的代码写到文件中。

先来看看配置文件:

#活动
#section
[activity,frmActivityEdit]
#{option:value}
start_part:start,活动编辑,
activity:menu,2,1
add_button:addbtn,4,

下面是生成脚本的部分代码:

import ConfigParser
import time conf = ConfigParser.RawConfigParser()
#读取配置文件
conf.read("section1.cfg")
now = time.strftime("%Y-%m-%d",time.localtime(time.time()))
sectionlist = conf.sections()
#print sectionlist
for list in sectionlist:
(classname,frmedit) = list.split(',')
#生成文件
pyfilepath = r'E:\\workspace\\%spage.py'%classname
#写文件
pyfile = open(pyfilepath,'w')
#读取每个section,遍历键,分析类型,写入代码
optionlist = conf.options(list)
for list2 in optionlist:
#分解value
(optiontype,ranking,selector) = conf.get(list, list2).split(',')
#需要生成的脚本
menu_code = '''\n\n def goto_%s_page(self):
loginpage.LoginPage(self.driver).login_sys(username="abcd", passwd="password")
com_page = commonpage.CommonPage(self.driver)
com_page.click_menu(%s,%s)'''%(list2,ranking,selector)
#判断类型,决定写入哪些脚本
if optiontype == 'start':
pyfile.writelines(start_code)
elif optiontype == 'menu':
pyfile.writelines(menu_code)
else:...
pyfile.close()

接下来只要完善配置文件,大部分的界面类就能完成了。

持续学习中,,,

(Python)自动生成代码(方法一)的更多相关文章

  1. Python自动生成代码工具

    项目中有一个需求,对一个基类而言,拥有一个比较方法和拷贝方法,某些地方需要频繁地对这两个方法进行调用.对于所有子类而言,需要重写这两个方法,并在其中维护类内一些成员变量.例如有一个变量m_iMyVal ...

  2. python 自动生成C++代码 (代码生成器)

    python 代码自动生成的方法 (代码生成器) 遇到的问题 工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错:而借用pyth ...

  3. mybatis-generator自动生成代码时,只生成insert方法

    今天使用mybatis-generator自动生成代码时,发现只能生成insert方法, 以前所有的方法都是可以生成的,查看网上解决办法和检查数据库表结构后, 发现2种可以解决的办法: 1.修改myb ...

  4. 从用python自动生成.h的头文件集合和类声明集合到用python读写文件

    最近在用python自动生成c++的类.因为这些类会根据需求不同产生不同的类,所以需要用python自动生成.由于会产生大量的类,而且这些类是变化的.所以如果是在某个.h中要用include来加载这些 ...

  5. mybatis 自动生成代码(mybatis generator)

    pom.xml 文件配置 引入 mybatis generator <properties> <mysql.connector.version>5.1.44</mysql ...

  6. ButterKnife的使用以及不能自动生成代码问题的解决

    ButterKnife的使用以及不能自动生成代码问题的解决 转载请注明出处:http://www.cnblogs.com/zhengjunfei/p/5910497.html 最近换了个工作刚入职,又 ...

  7. 【MyBatis】MyBatis自动生成代码查询之爬坑记

    前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...

  8. mybatis-generator自动生成代码插件

    mybatis自动生成代码(实体类.Dao接口等)是很成熟的了,就是使用mybatis-generator插件. 它是一个开源的插件,使用maven构建最好,可以很方便的执行 插件官方简介: http ...

  9. SpringBoot 添加mybatis generator 自动生成代码插件

    自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <gr ...

随机推荐

  1. Input 标签 安卓 与 IOS 出现圆角 显示

    Input 标签 input[type="submit"],input[type="reset"],input[type="button"] ...

  2. <自动化测试方案_7>第七章、PC端UI自动化测试

    第七章.PC端UI自动化测试 UI自动化测试又分为:Web自动化测试,App自动化测试.微信小程序.微信公众号UI层的自动化测试工具非常多,比较主流的是UFT(QTP),Robot Framework ...

  3. iOS:我的学习路径

    1.复习C语言(半个月) <C Primer Plus>1-6章 2.学习Objective-C基础语法(一周) 黑马程序员视频 3.直接用Xcode开始APP的实战(半个月) 黑马程序员 ...

  4. REST教程

    REST教程 越来越多的人开始意识到,网站即软件,而且是一种新型的软件.这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high late ...

  5. lua_local变量在new时不会被清空

    前言 我的运行环境 Lua5.3 按照我们以往的Java或C#编程经验,如果一个class被new,那么这个class中所有成员变量的值都是默值或是构造函数中赋的值,但在Lua中的local变量却并不 ...

  6. maven中央仓库、远程仓库地址

    1.http://repo1.maven.org/maven2 (官方,速度一般) 2.http://maven.aliyun.com/nexus/content/repositories/centr ...

  7. 原创|1分钟搞定 Nginx 版本的平滑升级与回滚

    Nginx无论是对于运维.开发.还是测试来说,都是日常工作需要掌握的一个知识点,之前也写过不少关于Nginx相关的文章: Nginx服务介绍与安装 Nginx服务配置文件介绍 Nginx配置虚拟主机 ...

  8. UltraEdit文本行数多变一和一边多

    一.UltraEdit文本行数多行转换成一行 1.文本样式内容 1.qwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiop ...

  9. Android中自定义IP控件

    最近在搞Android项目,之前并没有系统的去学过这方面的编程,只能边看书边撸代码.在项目的开发的过程中,需要一个IP控件,后面了解到Android中并没有这样的控件,于是网上搜索,发现得到的结果并不 ...

  10. Django2 Django MTV模板

    1.MVC模型 Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务对象与数据库 ...