(Python)自动生成代码(方法一)
在写某个平台的自动化脚本时,笔者把全部的操作都封装到了两个类中,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)自动生成代码(方法一)的更多相关文章
- Python自动生成代码工具
项目中有一个需求,对一个基类而言,拥有一个比较方法和拷贝方法,某些地方需要频繁地对这两个方法进行调用.对于所有子类而言,需要重写这两个方法,并在其中维护类内一些成员变量.例如有一个变量m_iMyVal ...
- python 自动生成C++代码 (代码生成器)
python 代码自动生成的方法 (代码生成器) 遇到的问题 工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错:而借用pyth ...
- mybatis-generator自动生成代码时,只生成insert方法
今天使用mybatis-generator自动生成代码时,发现只能生成insert方法, 以前所有的方法都是可以生成的,查看网上解决办法和检查数据库表结构后, 发现2种可以解决的办法: 1.修改myb ...
- 从用python自动生成.h的头文件集合和类声明集合到用python读写文件
最近在用python自动生成c++的类.因为这些类会根据需求不同产生不同的类,所以需要用python自动生成.由于会产生大量的类,而且这些类是变化的.所以如果是在某个.h中要用include来加载这些 ...
- mybatis 自动生成代码(mybatis generator)
pom.xml 文件配置 引入 mybatis generator <properties> <mysql.connector.version>5.1.44</mysql ...
- ButterKnife的使用以及不能自动生成代码问题的解决
ButterKnife的使用以及不能自动生成代码问题的解决 转载请注明出处:http://www.cnblogs.com/zhengjunfei/p/5910497.html 最近换了个工作刚入职,又 ...
- 【MyBatis】MyBatis自动生成代码查询之爬坑记
前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...
- mybatis-generator自动生成代码插件
mybatis自动生成代码(实体类.Dao接口等)是很成熟的了,就是使用mybatis-generator插件. 它是一个开源的插件,使用maven构建最好,可以很方便的执行 插件官方简介: http ...
- SpringBoot 添加mybatis generator 自动生成代码插件
自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <gr ...
随机推荐
- 扫码下单与ERP客户端锁桌功能FAQ
一.需求场景:因为目前客户端和平台端有两套数据库,两套数据库通过网络交互信息,且双方都可以发起支付,这种结构容易造成: 1.一笔订单同时支付.一笔订单支付时未按最新订单进行支付,支付多付.支付少付的情 ...
- winserver-记录共享文件夹操作日志
abstract 1.在共享文件夹上开启审计. 2.在日志中查看操作记录. 开启审计 共享文件夹属性 选择审计 添加审计用户 选择用户及审计事件 日志查看 运行eventvwr 在windowslog ...
- mysql 导出数据报错: row must be in range 0-65535
数据导出时,出现错误: 一脸懵逼,百度了下,是导出数量有格式有限制.一开始导出为excel表格式,后改为文本格式,不会报错.
- vue笔记未整理
全局组件 局部组件 子组件传值到父组件 父子组件传值 watch跟计算属性差不多,都会有缓存,计算属性优先 计算属性get set 对象 数组 对象 数组 不复用 改变数组 直接修改数组,页面没变化 ...
- servlet中 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver异常
解决方法:将mysql-connector-java-xxx-bin.jar包,复制到项目下WebContent/WEB-INF/lib目录下,刷新重启tomcat运行即可.
- app测试中隐藏键盘
1.参考连接 https://www.cnblogs.com/raindrop2007/articles/7849905.html 2.在项目中的使用 2.1 设置手机上的“语言输入法”,选择appi ...
- 彻底搞懂spark的shuffle过程(shuffle write)
什么时候需要 shuffle writer 假如我们有个 spark job 依赖关系如下 我们抽象出来其中的rdd和依赖关系: E <-------n------, ...
- 使用 JS 输出螺旋矩阵
关于螺旋矩阵 这是我曾经遇到过的面试题,在 LeetCode 上找到了题目的原型,难度中等.题目描述如下: 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中 ...
- 安装maven,并配置eclipse
平台 ubuntu 18.04 + Java 8 下载并安装Maven 下载页面:http://maven.apache.org/download.cgi 我这里使用写博客是最新的版本3.6.1,选择 ...
- CentOS系统版本的查看方法
CentOS系统版本的查看方法 查看操作系统版本 1 [root@aliyun ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noa ...