基於python+selenium的二次封裝
這是個人對selenium.webdriver寫的一些常用操作的二次封裝,也就相當於重寫了,不再使用自帶的框架,用自己寫的框架完成。這樣的話使程式碼更簡潔,用自己的思想完成程式碼的編寫。
首先在根目錄下建立子目錄名為Common作為公用資料,名字隨自己取,在Common目錄下建立basepage.py和dir_config檔案。(關於這兩個py檔案要用來做什麼,後面有說到)
首先我們開啟dir_config檔案
看名字就可以很清楚的看到這是要幹什麼。
logs_dir = os.path.join(base_dir,“OutPuts/logs”)
(至於為什麼要這麼寫,我不做介紹了,這篇文章是針對於有基礎來講的)
用這一行來講,就是日誌存放的目錄=我箭頭指向的目錄,每個都一樣。
先把所需要存放的目錄路徑配置好,根據自己所需來配。
接下來我們來到basepage檔案下
先把所需要的模組、包匯入好,至於我們為什麼要用到這些模組,後面就曉得了,嘻嘻嘻
建立一個類名為 BasePage
寫一個初始化函式加上driver形參。self.driver = driver
這是等待元素操作的重寫,就是WebdriverWait().until(expected_conditions.visibility_of_element_located())的重寫
我後面還加了一個doc這個引數,上面我寫了註釋就是模組名_頁面名稱_操作名稱,這樣的話 如果報錯的話 我可以在日誌、截圖、報告很清楚的看到是哪個模組,哪個頁面,哪個操作出錯了。還有其他的引數我都帶了註釋、以及每一行程式碼我都帶了註釋,我就不一一講了。
這是查詢元素的重寫
為什麼要寫一個查詢的元素,請看下方
這是點選操作的重寫,我直接呼叫了查詢,這個函式就是找到元素並點選。一遍而過。
比如send_keys()等等
並且在每次操作之前都加了日誌
如logging.info(f"{doc}:元素:{locator}輸入內容:{text}")
他這裡如果是正確獲取的話,日誌會顯示在哪個模組哪個元素中輸入什麼內容,寫的一清二楚,如果錯了,相反我也打了錯誤的日誌。(doc就是哪個模組哪個頁面哪個操作下)
還有很多其他的操作,都是一樣的套路,如果覺得我這個重寫寫的不錯的可以按照我的套路去寫其他的操作
獲取元素內容操作等等,我就不一一截圖了
比如哪裡出錯了,會在指定的路徑下存在報錯日誌,截圖等等
鄭州人流手術多少錢
而且每個錯誤都會帶上doc方便自己排查錯誤。
好了,我們來實操,用下這個框架
首先建立一個登陸頁面的py檔案LoginPage
匯入BasePage並建立一個類來繼承BasePage
from PageLocators.LoginLocators.login_locators import LoginLocators as loc
這個模組是我存放login頁面的定位元素
由於我們在BasePage寫了初始化函式,所以這裡不需要寫了
然後我們定義一個login的函式帶上username,password引數,這是代表輸入使用者名稱和密碼的形參
再定義一個doc
直接用我們剛才重寫的二次封裝來用
首先我們是要找到使用者名稱輸入框這個元素,在這個元素中輸入我們的使用者名稱
就可以直接用input_text()
self.input_text(loc.name_text,username,doc)
loc.name_text就是我們所定義的使用者名稱輸入框的定位表示式以及定位元素,我用元祖的形式括起來的。看上面的圖片
後面username就是使用者名稱的形參,等你測試用例呼叫登陸頁面操作的時候再傳使用者名稱資料就好了,我每一個都帶了doc,所以doc必傳。
所有的操作都是一樣的,理解一個就可以理解全部了。
樓主考慮到為什麼元組的形式也可以傳進去,這裡我給個特寫。
看我在locator前面加了這個符號,這個符號是解包的意思
self.driver.find_element(By.XPATH, ‘//*[contains(@name,“username”)]’)
實際上就是這個意思。
然後我傳個元祖直接引用就OK了
好了,然後我們再用pytest單元測試框架寫測試用例,然後引用LoginPage
這紅框內就是username和password的實參啦,我這是呼叫登陸的測試資料。這麼理解就好了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2672407/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於Glide4.7.1二次封裝IDE封裝
- 基於 uber 開源的 zap 二次封裝封裝
- 基於Vue+element-ui 的Table二次封裝VueUI封裝
- 基於workerman-jsonrpc二次封裝的一個packageJSONRPC封裝Package
- 基於 antd 風格的 element-table + pagination 的二次封裝封裝
- 釋出一個基於 mprpc_config 二次封裝的 pip 包RPC封裝
- axios的二次封裝iOS封裝
- 基於 Fetch 的請求封裝封裝
- Flutter 基於Bloc框架的封裝FlutterBloC框架封裝
- 基於spring boot框架進行二次封裝,微型框架編寫思路Spring Boot框架封裝
- axios二次封裝iOS封裝
- 二次封裝WebDriverWait封裝WebAI
- 基於javascript的拖拽類封裝^o^JavaScript封裝
- Dapper的封裝、二次封裝、官方擴充套件包封裝,以及ADO.NET原生封裝APP封裝套件
- Flutter Dio二次封裝Flutter封裝
- elment dialog二次封裝封裝
- 基於Docker封裝的開發包工具Docker封裝
- 基於celery及redis封裝sanic的apiRedis封裝API
- 基於透明fragment的長流程封裝技巧Fragment封裝
- 基於NET 6.0 封裝的 Fast.Framework封裝ASTFramework
- iOS 基於FMDB簡單封裝iOS封裝
- 基於jq封裝ajax請求封裝
- 基於 logger sdk-logger 封裝封裝
- selenium-webdriver的二次封裝(十)Web封裝
- axios二次封裝學習iOS封裝
- Selenium二次封裝-Python版本封裝Python
- OpenResty Redis操作二次封裝RESTRedis封裝
- 基於iOS 10、realm封裝的下載器iOS封裝
- 基於webpack5封裝的cli工具packxWeb封裝
- 如何基於 React 封裝一個元件React封裝元件
- 基於NPOI封裝匯出Excel方法封裝Excel
- 基於Promise實現對Ajax的簡單封裝Promise封裝
- 基於gin框架封裝的web專案骨架goskeleton框架封裝WebGo
- uview-ui toast 二次封裝ViewUIAST封裝
- 基於DotNetCoreNPOI封裝特性通用匯出excelNetCore封裝Excel
- vue全家桶 ---axios的使用和二次封裝VueiOS封裝
- axios的二次封裝與async,await的配合使用?iOS封裝AI
- 基於vue.js實現樹形表格的封裝Vue.js封裝