python3+selenium3使用excel引數化
作自動化,必不可少的是引數化這個步驟了,後期維護用例,方便或者管理方便都少不了引數化這一步。
就講講我自己第一次實現引數化的過程和碰到的一些問題的:
首先是安裝xlrd模組,網上能找的方法稍微研究一下基本也能用,我來說說實際能用的吧。
使用pip安裝,最直接,自動安裝相應的目錄下,可直接使用。
首先,在安裝python+selenium的時候相信是有安裝過pip的(沒有的可以百度一下python3+selenium環境配置這裡不做贅述)
然後使用命令到pip目錄下(我的目錄如下):
輸入pip install xlrd,系統自動安裝組xlrd模組,在python中直接引用就可以正常使用了
接下來說一下程式碼:
這是可以在python3正常讀取excel的方法(原方法沒有讀取列)先讀取標題行下的資料行資料,再分別讀取每一行的列(excel一個行一個列定位一格資料)儲存到字典中,一行作為一個字典,存放到列表中
如果使用原文:https://blog.csdn.net/yzl11/article/details/52832941的方法,無法實現在其他地方點用,若在其他地方呼叫,會出現表格中資料讀取兩次的情況(一列資料讀取兩次,儲存兩個想通過字典)
def open_excel(file = 'file.xls'):#開啟要解析的Excel檔案 try: data = xlrd.open_workbook(file) returndata except Exception as e: print(e) def excel_by_index(file = 'file.xls', colindex = 0, by_index = 0):#按表的索引讀取 data = open_excel(file)#開啟excel檔案 tab = data.sheets()[by_index]#選擇excel裡面的Sheet nrows = tab.nrows#行數 ncols = tab.ncols#列數 colName = tab.row_values(colindex)#第0行的值 list = []#建立一個空列表for x in range(1, nrows): #第一行為標題(第一行為0),所以從第二行開始 row = tab.row_values(x) if row: app = {}#建立空字典 for y in range(0, ncols): app[colName[y]] = row[y] list.append(app) return list
在用例中呼叫:
def test_user_management(self): listdata = excel_by_index("E:\\data.xlsx") print(listdata) if (len(listdata) <= 0): assert 0, u"Excel資料異常" for i in range(0, len(listdata)): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.driver.maximize_window() # 最大化瀏覽器 self.driver.get("http://xxxx") self.driver.implicitly_wait(20) self.driver.set_window_size(1440, 900) # 解析度 1280*800 time.sleep(1) # 點選登入按鈕 self.driver.find_element_by_xpath(".//*[@id='userNo']").send_keys(listdata[i]['username']) self.driver.find_element_by_xpath(".//*[@id='pwd']").send_keys(listdata[i]['password']) self.driver.find_element_by_xpath(".//*[@id='subSave']").click() time.sleep(2) if Login_Blog.isElementExist(self, ".//*[@id='main']/div/div[2]/div[1]/div[3]/div[4]/div/span"): pass elif Login_Blog.isTextExist(self, "User Login", ".//*[@id='page-container']/div/div[1]/div/small") and \ Login_Blog.isTextExist(self, "登入失敗,請重新登入.", ".//*[@id='showMsg']"): pass elif Login_Blog.isTextExist(self, "User Login", ".//*[@id='page-container']/div/div[1]/div/small") and \ Login_Blog.isTextExist(self, "使用者名稱或密碼錯誤,請重新輸入", ".//*[@id='showMsg']"): pass else: assert 0, u"登入失敗,找不到右上角頭像" self.driver.close()使用鍵值匹配,分別讀取excel中的使用者名稱密碼實現登入測試,結果返回在日誌中(程式碼中使用了部分我自己封裝的頁面檢查方法):
使用xlrd主要出現的問題是python3網上說的安裝方法直接用過,都一直報錯,包括下載安裝包安裝(可能相容問題)使用Pychrom直接新增也一直失敗,後來去研究了pip安裝終於成功(必須cd到pip.exe的目錄下才能使用pip命令安裝)
第二個問題是網上給出的方法大同小異,基本都不適用(或者適用python2沒有試過),根據自己思路做了輕微調整定位行列,前期直接使用網上的方法讀取的資料都是重複的,造成用例重複執行了。
希望能給學到這的有一定幫助
參考資料:https://blog.csdn.net/yzl11/article/details/52832941