关于selenium+python的框架
生活随笔
收集整理的這篇文章主要介紹了
关于selenium+python的框架
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目前公司需要上自動化,先學習之。現在努力在優化架構。現在我搭建的架構如下:
其中:
autocase:自動化用例
data:參數數據
pagescreens:截圖(當出現錯誤,或者需要監控時)
report:測試報告
test_case:測試用例
all_test:測試用例集
?
現在的架子還有一點就是封裝,基礎類的封裝。這個沒有做好,需要繼續的完善
?
2015-7-22,框架補充
目前研究的框架為selenium2+python+unittest,模式為po(pageobject),在實踐中進行學習。
首先建立基礎類(basepage)
# -*- coding: utf-8 -*- ''' Created on 2015年7月21日@author: admin 方法:基礎類,供所有類繼承 ''' from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver import time import sys reload(sys) import time, osclass Action(object):"""BasePage封裝所有頁面都公用的方法,例如driver, url"""kb_url = "http://127.0.0.1:1080/"#初始化driver、url、等def __init__(self, selenium_driver, base_url=kb_url, parent=None):self.base_url = base_urlself.driver = selenium_driverself.timeout = 30self.parent = parentself.tabs = {}"""通過傳參選擇啟動瀏覽器# self.browser = "Firefox" #傳入瀏覽器對象# if Action.driver == None:# if self.browser.upper() == 'IE': Action.driver = webdriver.Ie()# elif self.browser.upper() == 'CHROME': Action.driver = webdriver.Chrome()# elif self.browser.upper() == 'FIREFOX': Action.driver = webdriver.Firefox()# elif self.browser.upper() == 'SAFARI': Action.driver = webdriver.Safari()# else: Action.driver = webdriver.Ie()# Action.driver.maximize_window()# #pass# #print u"加載瀏覽器驅動失敗!"# self.driver = Action.driverself.verificationErrors = []"""#打開頁面,校驗頁面鏈接是否加載正確def _open(self, url):#使用get打開訪問鏈接地址url = self.base_url + urlself.driver.get(url)self.driver.maximize_window()#使用assert進行校驗,打開的鏈接地址是否與配置的地址一致。調用on_page()方法assert self.on_page(), u"打開開頁面失敗 %s" % url#重寫元素定位方法def find_element(self, *loc):#return self.driver.find_element(*loc)try:WebDriverWait(self.driver, 15).until(lambda driver: driver.find_element(*loc).is_displayed())return self.driver.find_element(*loc)except:print u"%s 頁面中未能找到 %s 元素" % (self, loc)#重寫一組元素定位方法def find_elements(self, *loc):#return self.driver.find_element(*loc)try:if len(self.driver.find_elements(*loc)):return self.driver.find_elements(*loc)except:print u"%s 頁面中未能找到 %s 元素" % (self, loc)def open(self):self._open(self.url)def on_page(self):return self.driver.current_url == (self.base_url + self.url)#定義script方法,用于執行js腳本,范圍執行結果def script(self, src):self.driver.execute_script(src)#重寫定義send_keys方法def send_keys(self, loc, vaule, clear_first=True, click_first=True):try:if click_first:self.find_element(*loc).click()if clear_first:self.find_element(*loc).clear()self.find_element(*loc).send_keys(vaule)except AttributeError:print u"%s 頁面中未能找到 %s 元素" % (self, loc)#savePngName:生成圖片的名稱def savePngName(self, name):"""name:自定義圖片的名稱"""day = time.strftime('%Y-%m-%d', time.localtime(time.time()))fp = "..\\result\\" + day + "\\image"tm = self.saveTime()type = ".png"if os.path.exists(fp):filename = str(fp)+"\\" + str(tm)+str("_")+str(name)+str(type)print filenamereturn filenameelse:os.makedirs(fp)filename = str(fp)+ "\\" + str(tm)+str("_")+str(name)+str(type)print filenamereturn filename#獲取系統當前時間def saveTime(self):"""返回當前系統時間以括號中(2014-08-29-15_21_55)展示"""return time.strftime('%Y-%m-%d-%H_%M_%S', time.localtime(time.time()))#saveScreenshot:通過圖片名稱,進行截圖保存def saveScreenshot(self, driver, name):"""快照截圖name:圖片名稱"""#獲取當前路徑#print os.getcwd()image = driver.save_screenshot(self.savePngName(name))return image View Code?
接著定義我目前要使用的登陸類的page
# -*- coding: utf-8 -*- ''' Created on 2015年7月21日@author: admin 方法:登陸頁面方法 ''' import basepage from selenium.webdriver.common.by import By import sys, os,time reload(sys) #繼承BasePage類 class LoginPage(basepage.Action):#定位器url = "/WebTours/"username_loc=(By.NAME, "username")password_loc=(By.NAME,"password")login_loc=(By.NAME,"login")#Actiondef open(self):self._open(self.url)#調用send_keys,輸入用戶名def input_username(self, username):#print self.username_loc self.send_keys(self.username_loc, username)#調用send_keys,輸入密碼def input_password(self, password):self.send_keys(self.password_loc, password)#調用click,點擊登錄def click_submit(self):self.find_element(*self.login_loc).click() def test_user_login(driver, username, password):login_page = LoginPage(driver)login_page.open()time.sleep(3)driver.switch_to_frame("body")driver.switch_to_frame("navbar")login_page.input_username(username)login_page.input_password(password)login_page.click_submit() View Code然后在測試用例中,實現具體的操作
# -*- coding: utf-8 -*-''' Created on 2015年7月22日@author 方法:登陸 ''' from selenium import webdriver import sys, time import unittest import sys reload(sys) sys.path.append("po") from po import logpage class Log(unittest.TestCase):def setUp(self):self.driver = webdriver.Firefox()self.driver.implicitly_wait(30)self.verificationErrors = []self.accept_next_alert = Truedef test_log(self):driver = self.driverusername = 'today'password = '123'logpage.test_user_login(driver, username, password)def tearDown(self):time.sleep(5)self.driver.quit()self.assertEqual([], self.verificationErrors) if __name__ == "__main__":unittest.main() View Code一個簡單的po模式就完成了。
在做這個之前,由于覺得難度很大,一直沒有下決心去寫,到處找源碼,找別人的代碼。其實真正寫了,才有不同的體會,這個需要好好把握的一個度
目前完善的架構如下,當然還有很多需要改進的。繼續努力吧
?
轉載于:https://www.cnblogs.com/today123/p/4648518.html
總結
以上是生活随笔為你收集整理的关于selenium+python的框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Introduction to Big
- 下一篇: 二维数组中的查找问题