Selenium之Page Object Model 设计理念 ------Common篇

本文介绍Selenium PO模式中的Common页理念与编写方法,包括数据驱动所需的各种封装,如CSV读取、Excel单元格定位、yaml数据管理、日志记录及截图保存等,适用于自动化测试场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我们学习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模式

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值