python3 selenium web自動化測試之excel引數化

zhusongziye發表於2017-09-06

簡單來說,就是不把測試的資料(或者說用例的引數)直接寫在程式碼裡,而是寫在excel中,程式碼從excel表格中讀取出來,做到資料分離。簡單舉個例子,上程式碼:

#coding=utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import time
import xlrd

def open_excel(file = 'login.xlsx'):
    try:
        data = xlrd.open_workbook(file)  # 開啟Excel檔案讀取資料
        return data
    except Exception, e:
        print str(e)

# 根據索引獲取Excel表格中的資料 引數:file:Excel檔案路徑 colnameindex:表頭列名所在行的所以 ,by_index:表的索引
def excel_table_byindex(file = 'login.xlsx',colnameindex=0,by_index=0):
    data = open_excel(file)
    table = data.sheets()[by_index]  # 通過索引順序獲取獲取一個工作表
    nrows = table.nrows  # 獲取行數
    colnames = table.row_values(colnameindex)  # 獲取某一行資料
    list =[]
    for rownum in range(1, nrows):
        row = table.row_values(rownum)
        if row:
            app = {}
            for i in range(len(colnames)):
                app[colnames[i]] = row[i]
                list.append(app)
    return list
def Login():
    listdata = excel_table_byindex("D:\\login.xlsx", 0)
    # listdata = excel_table_byindex("login.xlsx", 0)
    if(len(listdata) <= 0):
        assert 0, u"Excel資料異常"

    for i in range(1, len(listdata)):
        driver = webdriver.Firefox()
        driver.get("http://www.baidu.com")
        assert u"百度一下,你就知道" in driver.title
        # 點選登入按鈕
        driver.find_element_by_xpath(".//*[@id='u1']/a[7]").click()
        time.sleep(3)
        url = driver.current_window_handle
        driver.switch_to.window(url)
        time.sleep(3)
        driver.find_element_by_name("userName").clear()
        driver.find_element_by_name("userName").send_keys(listdata[i]['passname'])
        driver.find_element_by_name("password").clear()
        driver.find_element_by_name("password").send_keys(listdata[i]['password'])
        driver.find_element_by_name("memberPass").click()
        time.sleep(15)
        driver.find_element_by_id("TANGRAM__PSP_8__submit").click()

        # driver.find_element_by_id('passname').send_keys(listdata[i]['passname'])
        # driver.find_element_by_id('password').send_keys(listdata[i]['password'])
        # driver.find_element_by_xpath("//div[2]/div[2]/div/div[6]/input").click()
        time.sleep(5)
        try:
            elem = driver.find_element_by_id("kw")
        except NoSuchElementException:
            assert 0, u"登入失敗,找不到右上角頭像"
        driver.close()

if __name__ == '__main__':
    Login()

表格中的資料為:


小編不保證你拷貝下來就能跑通過,因為環境有可能不一樣。所以,請看明白後舉一反三。謝謝您的瀏覽。

相關文章