import openpyxl, os from PythonUI自动化.keywords_关键字驱动.综合.common import WebUIKeys, log from openpyxl.styles import Font, PatternFill # log = Logs().logger() class excelOption(): # 获取 Excel 文件 def __init__(self, file_path=None): if file_path is None: self.file_path = os.path.dirname(os.getcwd()).replace('\\', '/') + '/综合/WebUICase.xlsx' else: self.file_path = file_path self.op_excel = self.open_excel(self.file_path) # 打开 Excel 表格 def open_excel(self, file_path): # 读取 Excel 文件 excel = openpyxl.load_workbook(file_path) return excel # # 获取到表格中的 sheets 页 def get_sheets(self): files = self.op_excel sheets = files.sheetnames return sheets # 读取指定的 sheet 页 def get_sheet(self, sheet_name=None): if sheet_name == None: sheet = self.op_excel['盛世明德登录'] else: sheet = self.op_excel[sheet_name] return sheet # 读取 sheet 页中的所有值 def get_sheet_values(self): values = self.get_sheet().values return values # 读取表格中的内容 # 表头: 0 编号 1 事件 2定位方法 3元素路径 4输入内容 5描述 6预期将结果 7实际结果 def write_excel(self, value, sheet, row): # 加粗 bold = Font(bold=True) # 填充表格颜色 绿色 if value == 'pass': fill = PatternFill('solid', fgColor='AACF91') elif value == 'false': # 红色 fill = PatternFill('solid', fgColor='FF0000') else: pass # 指定 x行x列的单元格大写,字体加粗变色 sheet.cell(row=row, column=8).value = value.upper() sheet.cell(row=row, column=8).fill = fill sheet.cell(row=row, column=8).font = bold # 保存和关闭表格 self.op_excel.save(self.file_path) self.op_excel.close() # 对每行的单元格的值进行字典对应 def format_data(self, event, type, value, text, description, expect): # 创建字典, 指定键, 对应值为空 dictDefault = dict.fromkeys(('event', 'type', 'value', 'text', 'description', 'expect')) dictDefault['事件'] = event dictDefault['type'] = type dictDefault['value'] = value dictDefault['text'] = text dictDefault['description'] = description dictDefault['expect'] = expect return dictDefault # def assert1(self): # excel 读取指定 sheet 页 sheet = self.get_sheet() # 遍历 sheet 页的数据 for value in sheet.values: # 如果 第一列 的数据类型是int, if type(value[0]) is int: # 将 表格单行的值 赋值给字典 dictDefault = self.format_data(value[1], value[2], value[3], value[4], value[5], value[6]) # 判断 事件类型, 如果是打开浏览器, 仅传入 dictDefault['text'] 的数据, 打印日志读取备注信息作为当前执行描述 if value[1] == 'open_browser': log.info(f'自动化执行中,当前执行: {value[5]}') wk = WebUIKeys(value[4]) # 如果 事件类型的值包含 assert, 调用函数并读取输入的值,获取返回值给到 status elif 'assert' in value[1]: log.info(f'自动化执行中,当前执行: {value[5]}') status = getattr(wk, value[1])(**dictDefault) # 将值变色,加粗,大写后 写入 指定行 第8列单元格 self.write_excel(status, self.get_sheet(), value[0]+1) else: # 其他 均按默认调用,根据需要的数据数量自动传入数据 log.info(f'自动化执行中,当前执行: {value[5]}') getattr(wk, value[1])(**dictDefault) else: pass if __name__ == '__main__': f = excelOption() f.assert1()
标签:封装,Excelopenpyxl,self,excel,value,关键字,dictDefault,path,sheet From: https://www.cnblogs.com/zengxin-/p/17690224.html