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

page.py部分代码:classBasePage(object):'''页面基础类'''

def __init__(self, driver):self.driver=driverdeffind_element(self,loc):return self.driver.find_element(*loc)#在输入框中输入文字

definput_text(self,loc,text):

self.find_element(loc).send_keys(text)

commonpage.py部分代码:classCommonPage(BasePage):'''平台通用的功能'''

####################################

#点击菜单

#big:第几个大菜单

#small:第几个小菜单

defclick_menu(self,big):

big_menu= (By.XPATH,"//ul/li[%s]/a/span"%big)

self.click(big_menu)

sleep(2)defclick_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 importBasePagefrom pages importcommonpage,loginpage#活动编辑-报名表界面

classact_applyPage(BasePage):#点击菜单

defgoto_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

defclick_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,1add_button:addbtn,4,

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

importConfigParserimporttime

conf=ConfigParser.RawConfigParser()

#读取配置文件

conf.read("section1.cfg")

now= time.strftime("%Y-%m-%d",time.localtime(time.time()))

sectionlist=conf.sections()#print sectionlist

for list insectionlist:

(classname,frmedit)= list.split(',')#生成文件

pyfilepath = r'E:\\workspace\\%spage.py'%classname#写文件

pyfile = open(pyfilepath,'w')#读取每个section,遍历键,分析类型,写入代码

optionlist =conf.options(list)for list2 inoptionlist:

#分解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代码_(Python)自动生成代码(方法一)相关推荐

  1. java生成iso9660工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...

    TableGo_20210212 v7.0.0 正式版发布,此次版本更新如下: 1.新增对DB2数据库的支持 2.新增按字段生成文件,支持把字段.JSON.XML数据转换成任何代码 3.新增大量新的自 ...

  2. 简洁的留言代码_这几段代码,测测你是 Python 菜鸟还是老司机

    这段话被称作"Python 之禅"(The Zen of Python),它列举了一些 Python 所推崇的理念,比如: 优美胜于丑陋 明确胜于隐晦 简单胜于复杂 - 可读性很重 ...

  3. python对象的生命周期_(python)通过一个代码例子来分析对象的生命周期 | 学步园...

    最近在学习python,看的是<简明python教程>,写的很是通俗易懂. 在一个类和对象的变量的例子中,看到代码运行结果突然想到在python中对象的生命周期的问题,代码运行结果: #! ...

  4. python对象的生命周期_(python)通过一个代码例子来分析对象的生命周期

    最近在学习python,看的是<简明python教程>,写的很是通俗易懂. 在一个类和对象的变量的例子中,看到代码运行结果突然想到在python中对象的生命周期的问题,代码运行结果: #! ...

  5. python办公自动化代码_[Python] 自动化办公 邮件操作基础知识及代码(下)

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 这篇文章能学到的主要内容: imbox 收取邮件 poplib 收取 ...

  6. python热搜排行功能_简单几行代码用Python爬取微博的热搜榜

    简单几行代码用Python爬取微博的热搜榜 想要实时的看微博热搜 但是又不想去微博网站看!怎么办呢?其实很简单! 我们学了这个requests_html 这个库之后 就更加的简单了! 小编只用了短短的 ...

  7. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...

  8. python如何设置字体大小_[Python Basic]如何设置 Python 的运行环境

    一如既往地, 咱们不仅仅是学习 Python 的基础知识, 同时, 也按照2/8 规律学习关键知识的关键部分 - python 核心词汇 如何安装 Python 下载 Python 打开网址:http ...

  9. python小软件制作教程_[Python]手把手教程:Python制作番茄钟

    这篇文章是根据Udacity的免费课程 编程基础:Python所做的笔记,适合零基础学习Python 我们先了解这个番茄钟的概念,就是每隔一段固定的时间就提醒你休息一下,可能是播放一段音乐, 弹出一个 ...

  10. python程序多次运行_[Python]在一段Python程序中使用多次事件循环

    背景 我们在Python异步程序编写中经常要用到如下的结构 import asyncio async def doAsync(): await asyncio.sleep(0) #... if __n ...

最新文章

  1. java读取文件效率问题
  2. 聊一聊:开源社区应该用中文吗?
  3. 浅析网站SEO优化对长尾关键词保持好感度的四大技巧
  4. 只会python好找工作吗-python真的不好找工作吗?
  5. 《位运算技巧以及Leetcode的一些位运算题目》
  6. python输入一个字符一个数字_Python:如何只对字符串中的数字字符加/减一个数字?...
  7. 智能技术改变淘宝,阿里巴巴首次详解核心商业AI体系
  8. docker中运行mysql5.7,使用navicat链接报错10061/10060
  9. ExtJS-3.4.0系列目录
  10. csdn中让图片居中
  11. 如何将多张图片合成一个pdf?
  12. 身体的质量指数BMI
  13. 计算机提示无法验证发布者,win10 ie11提示由于无法验证发布者所以windows已经阻止此软件怎么办...
  14. 普通最小二乘法的两种推导方法
  15. AD18运行PCB DRC显示一处警告, Design contains shelved or modified (but not repoured) polygons.
  16. 科研速记(2):ICCV19-Wavelet Domain Style Transfer for an Effective Perception-distortion Tradeoff
  17. HackTheBox | Horizontall
  18. “五小”成果技术报告 野外小队信息管理系统Ver1.00
  19. dnf加物理攻击的卡片有哪些_dnf物理攻击宝珠_dnf2019物理攻击宝珠大全_快吧游戏...
  20. 99、插值法,函数逼近,曲线拟和,数值积分,数值微分,解线性方程组的直接方法,解线性方程组的迭代法,非线性方程求根,常微分方程的数值解法...

热门文章

  1. 【XSY2774】学习 带花树
  2. 在CLR中自动本地化正在运行的.NET窗口
  3. HW Eth-Trunk链路聚合
  4. Linux文章大合集
  5. 通解:HTTP超时,或者require TLS/SSL,亦或者conda install / update/ create Solving environment不停
  6. Docker是什么,有什么用?一看就明白
  7. 你知道怎么解决DB读写分离,导致数据不一致问题吗?
  8. 济宁a货翡翠,芜湖a货翡翠
  9. 新华网评:企业的信息安全关把好了吗?
  10. 《Spring Data实战》——2.2 定义查询方法