這篇文章主要介紹了基于python+selenium如何實(shí)現(xiàn)二次封裝,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)是專業(yè)的江城網(wǎng)站建設(shè)公司,江城接單;提供成都做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行江城網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!這是個(gè)人對(duì)selenium.webdriver寫的一些常用操作的二次封裝,也就相當(dāng)于重寫了,不再使用自帶的框架,用自己寫的框架完成。這樣的話使代碼更簡(jiǎn)潔,用自己的思想完成代碼的編寫。
首先在根目錄下創(chuàng)建子目錄名為Common作為公用數(shù)據(jù),名字隨自己取,在Common目錄下創(chuàng)建basepage.py和dir_config文件。(關(guān)于這兩個(gè)py文件要用來做什么,后面有說到)
首先我們打開dir_config文件
看名字就可以很清楚的看到這是要干什么。
logs_dir = os.path.join(base_dir,“OutPuts/logs”)
(至于為什么要這么寫,我不做介紹了,這篇文章是針對(duì)于有基礎(chǔ)來講的)
用這一行來講,就是日志存放的目錄=我箭頭指向的目錄,每個(gè)都一樣。
先把所需要存放的目錄路徑配置好,根據(jù)自己所需來配。
接下來我們來到basepage文件下
先把所需要的模塊、包導(dǎo)入好,至于我們?yōu)槭裁匆玫竭@些模塊,后面就曉得了,嘻嘻嘻
創(chuàng)建一個(gè)類名為 BasePage
寫一個(gè)初始化函數(shù)加上driver形參。self.driver = driver
這是等待元素操作的重寫,就是WebdriverWait().until(expected_conditions.visibility_of_element_located())的重寫
我后面還加了一個(gè)doc這個(gè)參數(shù),上面我寫了注釋就是模塊名_頁面名稱_操作名稱,這樣的話 如果報(bào)錯(cuò)的話 我可以在日志、截圖、報(bào)告很清楚的看到是哪個(gè)模塊,哪個(gè)頁面,哪個(gè)操作出錯(cuò)了。還有其他的參數(shù)我都帶了注釋、以及每一行代碼我都帶了注釋,我就不一一講了。
這是查找元素的重寫
為什么要寫一個(gè)查找的元素,請(qǐng)看下方
這是點(diǎn)擊操作的重寫,我直接調(diào)用了查找,這個(gè)函數(shù)就是找到元素并點(diǎn)擊。一遍而過。
比如send_keys()等等
并且在每次操作之前都加了日志
如logging.info(f"{doc}:元素:{locator}輸入內(nèi)容:{text}")
他這里如果是正確獲取的話,日志會(huì)顯示在哪個(gè)模塊哪個(gè)元素中輸入什么內(nèi)容,寫的一清二楚,如果錯(cuò)了,相反我也打了錯(cuò)誤的日志。(doc就是哪個(gè)模塊哪個(gè)頁面哪個(gè)操作下)
還有很多其他的操作,都是一樣的套路,如果覺得我這個(gè)重寫寫的不錯(cuò)的可以按照我的套路去寫其他的操作
獲取元素內(nèi)容操作等等,我就不一一截圖了
比如哪里出錯(cuò)了,會(huì)在指定的路徑下存在報(bào)錯(cuò)日志,截圖等等
而且每個(gè)錯(cuò)誤都會(huì)帶上doc方便自己排查錯(cuò)誤。
好了,我們來實(shí)操,用下這個(gè)框架
首先創(chuàng)建一個(gè)登陸頁面的py文件LoginPage
導(dǎo)入BasePage并創(chuàng)建一個(gè)類來繼承BasePage
from PageLocators.LoginLocators.login_locators import LoginLocators as loc
這個(gè)模塊是我存放login頁面的定位元素
由于我們?cè)贐asePage寫了初始化函數(shù),所以這里不需要寫了
然后我們定義一個(gè)login的函數(shù)帶上username,password參數(shù),這是代表輸入用戶名和密碼的形參
再定義一個(gè)doc
直接用我們剛才重寫的二次封裝來用
首先我們是要找到用戶名輸入框這個(gè)元素,在這個(gè)元素中輸入我們的用戶名
就可以直接用input_text()
self.input_text(loc.name_text,username,doc)
loc.name_text就是我們所定義的用戶名輸入框的定位表達(dá)式以及定位元素,我用元祖的形式括起來的。看上面的圖片
后面username就是用戶名的形參,等你測(cè)試用例調(diào)用登陸頁面操作的時(shí)候再傳用戶名數(shù)據(jù)就好了,我每一個(gè)都帶了doc,所以doc必傳。
所有的操作都是一樣的,理解一個(gè)就可以理解全部了。
樓主考慮到為什么元組的形式也可以傳進(jìn)去,這里我給個(gè)特寫。
看我在locator前面加了這個(gè)符號(hào),這個(gè)符號(hào)是解包的意思
self.driver.find_element(By.XPATH, ‘//*[contains(@name,“username”)]')
實(shí)際上就是這個(gè)意思。
然后我傳個(gè)元祖直接引用就OK了
好了,然后我們?cè)儆胮ytest單元測(cè)試框架寫測(cè)試用例,然后引用LoginPage
這紅框內(nèi)就是username和password的實(shí)參啦,我這是調(diào)用登陸的測(cè)試數(shù)據(jù)。這么理解就好了。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“基于python+selenium如何實(shí)現(xiàn)二次封裝”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!