1. 程式人生 > >python3+selenium3使用excel引數化

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)
        return 
data 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