在寫某個平臺的自動化腳本時,筆者把所有的操做都封裝到了兩個類中,page.py和commonpage.py:python
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類),幾乎能完成所有元素的封裝、簡化操做流程等。相似封裝頁面元素部分代碼:app
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)。spa
最近恰好總結了python處理配置文件的知識,想到能夠用在自動生成代碼這裏。code
大體思路是:section值可做爲類名,option值可做爲方法,在value中,用「,」隔開多個有用的參數,其中第一個參數是option的類型(這個類型決定用那一段代碼);blog
先遍歷sections,在每一個section下,遍歷{option:value}鍵,分析value中的類型,把對應的代碼寫到文件中。element
先來看看配置文件:get
#活動 #section [activity,frmActivityEdit] #{option:value} start_part:start,活動編輯, activity:menu,2,1 add_button:addbtn,4,
下面是生成腳本的部分代碼:input
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()
接下來只要完善配置文件,大部分的界面類就能完成了。it
持續學習中,,,