selenium中 python 实现Excel读取账户信息(数据驱动)

  1. 前言
    在做用python+selenium做自动化测试的时候,数据驱动是一定会用到的,实现的方法有很多种,但是我觉得最简单实用的还是Excel表格,毕竟大家都会用。后面主要讲一下怎么用python 的xlrd模块去实现。(这类的教程在网上很多了,我写主要是怕自己忘了)

  2. xlrd模块
    这个模块是python中提供用于操作Excel表格的,使用前需要pip安装一下,对这一块不太了解的话,可以先在网上看看。我从网上找了几个会使用的方法贴下面。

 xl = xlrd.open_workbook(path)   # 打开一个Excel表格文件,path传文件路径加文件名
 sheet = xl.sheet_by_name(name)  # 通过工作簿名称获取整页内容
 sheet = xl.sheet_by_index(index)  # 通过工作簿索引获取整页内容
 sheet = xl.sheets()[index]  # 同上
 sheet.nrows  # 获取当前页总共有多少行
 sheet.ncols  # 获取当前页总共有多少列
 sheet.row_values(j)  # 获取第j行的内容,是个列表
 sheet.col_values(j)  # 获取第j列的内容,是个列表
  1. 具体实现方法
    首先先看一下我们的表格
    selenium中 python 实现Excel读取账户信息(数据驱动)_第1张图片
    我们要做的就是把表格的内容变成下面的样子:
    [{‘username’: ‘自动测试’, ‘password’: ‘123456’, ‘phone’: ‘1868686886’, ‘mailbox’: ‘[email protected]’, ‘sex’: ‘1’, ‘position’: ‘666’, ‘address’: ‘深圳南山国家工程实验大楼’, ‘describe’: ‘我就试试’},
    {‘username’: ‘第二个测试’, ‘password’: ‘123456’, ‘phone’: ‘1686868668’, ‘mailbox’: ‘[email protected]’, ‘sex’: ‘2’, ‘position’: ‘123’, ‘address’: ‘深圳南山国家工程实验大楼’, ‘describe’: ‘第一个死了 我来’}]
    太长了尴尬,一个列表,中间两个字典。
    我们要做的思路是这样子的,先创建一个空列表和空字典,然后我们要把表格第一行的内容和下面几行的内容对应上,比如{‘username’: ‘自动测试’} 而我们有八列属性,那就是要对应八次, 而上面的循环要执行几次 ,我们有两行数据,那就是要循环上面的循环两次就可以了。
    贴代码:
import xlrd

#  添加一个获取excel的接口
class XlUserinfo(object):
    def __init__(self,path = ''):
        self.xl=xlrd.open_workbook(path)  #  类实例化时,需传路径进来
 
    def floattostr(self, val):  #  将浮点型的数据改为字符串
        if isinstance(val, float):
            val = str(int(val))
        return val
 
    def get_sheet_info(self):  # 得到某个数据表中所有的数据
        infolist = []
        j = 1
        for row in range(self.sheet.nrows-1):  # 逐行读取内容,1表示从第二行开始因为第一行是表头不需要
            s = {}
            # values = self.sheet.row_values(j)  # 获取表格一行的值
            values = [self.floattostr(val) for val in self.sheet.row_values(j)]
            for x in range(self.sheet.ncols):  # 循环列数,目的将值与表头一一对应
                s[self.sheet.row_values(0)[x]] = values[x]  # 生成字典将表头对应下面的数据,例:{'uname'='admin'}
            infolist.append(s)  # 将字典放到列表中
            j += 1
        return infolist   # 返回一个由字典组成的列表

    def get_sheetinfo_by_name(self, name):  # xl支持通过名字获取表格
        self.sheet = self.xl.sheet_by_name(name)
        return self.get_sheet_info()

    def get_sheetinfo_by_index(self, index):  # xl支持通过索引 获取表格
        #self.sheet=self.xl.sheet_by_index(index)
        self.sheet=self.xl.sheets()[index]
        return self.get_sheet_info()
  1. 分段解析:
class XlUserinfo(object):
    def __init__(self,path = ''):
        self.xl=xlrd.open_workbook(path)  #  类实例化时,需传路径进来
 
    def floattostr(self, val):  #  将浮点型的数据改为字符串
        if isinstance(val, float):
            val = str(int(val))
        return val

isinstance(val, float)是判断第一个值是不是浮点型,是就返回True
定义这个主要用于登录测试时,浮点型的值输入不了用的。

  1. 重点:
def get_sheet_info(self):  # 得到某个数据表中所有的数据
        infolist = []
        j = 1
        for row in range(self.sheet.nrows-1):  # 逐行读取内容,1表示从第二行开始因为第一行是表头不需要
            s = {}
            # values = self.sheet.row_values(j)  # 获取表格一行的值
            values = [self.floattostr(val) for val in self.sheet.row_values(j)]
            for x in range(self.sheet.ncols):  # 循环列数,目的将值与表头一一对应
                s[self.sheet.row_values(0)[x]] = values[x]  # 生成字典将表头对应下面的数据,例:{'uname'='admin'}
            infolist.append(s)  # 将字典放到列表中
            j += 1
        return infolist   # 返回一个由字典组成的列表

先循环将第二行的值读出来,这里是个列表,再将列表的值for出来一个一个用floattostr()过一遍,再放到列表中并赋值给变量values,在循环8次将值一个一个和首行的值对应上,
self.sheet.row_values(0)[x] 取得是第一行的第x个值,values[x]是下面第二行的第x值,利用字典的特性,将其对应上,然后放到列表里。

最后调用下面两个方法的其中一个就可以了。

def get_sheetinfo_by_name(self, name):  # xl支持通过名字获取表格
        self.sheet = self.xl.sheet_by_name(name)
        return self.get_sheet_info()

    def get_sheetinfo_by_index(self, index):  # xl支持通过索引 获取表格
        #self.sheet=self.xl.sheet_by_index(index)
        self.sheet=self.xl.sheets()[index]
        return self.get_sheet_info()

写作有待提高,

你可能感兴趣的:(selenium)