思路
在 UI 自動化中頁面有很多不確定性,需求稍微有小小的變動,就需要修改自動化程式碼如果將定位元素和方法寫在一起,維護指令碼時就比較麻煩
因此,將定位元素放在配置檔案中,方法單獨寫,方法中的定位元素都來自配置檔案,維護時就比較方便
如果需求有變動,那個方法有變動就修改方法,定位有變動只需修改配置檔案中的定位元素
將定位元素與方法分離不但可以增強程式碼的簡潔性更有利的是維護起來方便
本文僅說明將元素配置成配置檔案
在專案中最好將配置檔案統一管理,例如都放在 configElement 檔案下
還是以百度首頁搜尋為例
步驟:
1、新建配置檔案
在 python 中配置檔案一般是 ini 格式,暫時命名為 BaiduElement.ini
內容如下:
[BaiduHomeElement] baidu_search_input = id:kw baidu_search_button = id:su
注:[BaiduHomeElement] 這個節點只是註明這個節點下的都為百度首頁的元素
如果是註冊頁面則可寫成 [RegisterElement] 名稱自定義,但最好還是寫的有點含義,別人一看就能看懂是什麼意思,是那個地方的元素
baidu_search_input = id:kw id 與 kw 之間的符號可以任意,只是為了區分用什麼定位,定位值是啥,也可以寫成<、=、》等,但是整個專案中最好統一
2、讀取配置檔案
配置檔案 ini 的讀取用到的是 configparser 庫,所以要先匯入該庫:pip install configparser
# 建立物件 cf = configparser.ConfigParser() # 讀取檔案,傳入檔案路徑,如果在同一個目錄下則直接傳入檔名即可 cf.read("BaiduElement.ini") # 獲取元素 # 第一個引數為自定義的節點,第二個引數節點下的key element = cf.get("BaiduHomeElement", "baidu_search_input") print(element)
列印結果:
3、對讀取配置檔案進行封裝
目的:使任意一個節點下的元素都可以使用同一個方法獲取
# encoding = utf-8 import configparser class ReadIni(object): def __init__(self, file_name=None): if file_name == None: file_name = "BaiduElement.ini" # 配置檔案路徑可以自定義,如果不在當前目錄下則讀取設定的檔案路徑 self.cf = self.load_ini(file_name) def load_ini(self,file_name):
"""讀配置檔案""" cf = configparser.ConfigParser() cf.read(file_name) return cf def get_value(self,pageElement,key):
"""獲得所需的值""" date = self.cf.get(pageElement,key) return date if __name__ == '__main__': cr = ReadIni() s = cr.get_value('BaiduHomeElement','baidu_search_input') print(s)
執行結果:
4、轉換
將步驟3獲取的結果進行處理,變成定位 key 和 value
方法很簡單,使用 split 方法即可
如下例:
s = id:kw print(s.split(':'))
列印結果為:['id', 'kw']
只需要將 selenium 中的定位進行二次封裝,將獲得第一個值作為定位 key ,第二個值作為定位 value 即可直接定位
原文釋出在微信公眾號:軟體羊皮卷
歡迎關注