日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

关于selenium+python的框架

發(fā)布時間:2025/4/14 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于selenium+python的框架 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目前公司需要上自動化,先學習之。現(xiàn)在努力在優(yōu)化架構。現(xiàn)在我搭建的架構如下:

其中:

autocase:自動化用例

data:參數(shù)數(shù)據(jù)

pagescreens:截圖(當出現(xiàn)錯誤,或者需要監(jiān)控時)

report:測試報告

test_case:測試用例

all_test:測試用例集

?

現(xiàn)在的架子還有一點就是封裝,基礎類的封裝。這個沒有做好,需要繼續(xù)的完善

?

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方法,用于執(zhí)行js腳本,范圍執(zhí)行結果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#獲取系統(tǒng)當前時間def saveTime(self):"""返回當前系統(tǒng)時間以括號中(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

然后在測試用例中,實現(xiàn)具體的操作

# -*- 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模式就完成了。

在做這個之前,由于覺得難度很大,一直沒有下決心去寫,到處找源碼,找別人的代碼。其實真正寫了,才有不同的體會,這個需要好好把握的一個度

目前完善的架構如下,當然還有很多需要改進的。繼續(xù)努力吧

?

轉載于:https://www.cnblogs.com/today123/p/4648518.html

總結

以上是生活随笔為你收集整理的关于selenium+python的框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。