在我们学习selenium的po模式之前,我们先要了解什么是自动化测试,以及selenium中的八大定位的基本操作,那么接下来,您可以跟我一起走进po模式中的Common篇的编写(公用方法)
引言
Common页的理念:
Common页存放于我们用来做数据驱动以及各种封装方便自动化用例实现的方法,比如csv的读取、json数据的读取方法、封装日志、yaml管理数据、截图方法(一般用于在执行用例时发现的问题,用截图的方法将问题留存,并转交开发)等
Common页的具体编写
编写Common页前提:
将我们在数据驱动能够用到的所有方法进行封装(根据项目的情况来实施)
1、首先要在Common页下创建common.py文件
2、创建一个common类(公用类)
class Common():
def __init__(self,path):
self.path = path
def ReadCSV(self,file_name): #读取csv方法
path = self.path+'/' + file_name + '.csv'
with open(path) as f:
import csv
csvs = csv.reader(f)
List = []
next(csvs,None)
for i in csvs:
List.append(i)
return List
def ReadExcel(self,file_name,x,y,sheet_name = 'Sheet1'): #x,y定位单元格,取单元格中的值,默认sheet页为Sheet1
path = self.path+'/' + file_name + '.xlsx'
import xlrd
workbooks = xlrd.open_workbook(path).sheet_by_name(sheet_name)
return workbooks.cell_value(x,y)
def Readyaml(self):
import os,yaml
DictData = {}
for file_path,dic_name,file_name in os.walk(self.path): # 使用os内置方法遍历该路径下的文件路径、文件夹名字、文件名字
for file in file_name: # 循环所有的文件名
if file[-5:] =='.yaml': # 找到后缀为.yaml的
yaml_path = os.path.join(file_path,file) # 使用os内置方法进行拼接完整路径
with open(yaml_path,encoding='utf-8') as f: # 打开文件
yamls = yaml.load(f) # 使用yaml方法转换数据
DictData.update(yamls) # 更新到字典里
return DictData
def GetLogs(self): # 日志方法
import logging,time
path = r'D:\PycharmProjects\自动化\Page_Object_Model\Report\logs' + '/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.log' # 让每一个日志按照调用时的日期生成
logs = logging.getLogger()
logs.setLevel(logging.DEBUG)
write_file = logging.FileHandler(path,'a+',encoding='utf-8')
write_file.setLevel(logging.DEBUG)
set_formatter = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s')
write_file.setFormatter(set_formatter)
kz = logging.StreamHandler()
kz.setLevel(logging.DEBUG)
kz.setFormatter(set_formatter)
logs.addHandler(write_file)
logs.addHandler(kz)
return logs
def Crop_Image(self,driver):
import time
path = r'D:\PycharmProjects\自动化\Page_Object_Model\Image'+'/'+ time.strftime('%Y-%m-%d-%H-%M-%S')+'.png'
# Image包在项目下新创一个,用于收集在执行用例中发现的缺陷
driver.maximize_window() # 放大浏览器
driver.get_screenshot_as_file(path)
使用yaml管理数据的方式也很方便,以后会更新如何使用yaml来管理定位元素
以上就是对common页封装的方法,也可以根据项目的实际要求来封装
持续更新中,下一篇为您带来case页中如何调用page,具体实现PO模式