Selenium实战丨Common层的配置


一、获取路径以及地址

我们需要一个获取项目路径,以方便后续使用

PS:接下来所有代码行中的第一行为文件位置以及文件名字

Common/get_function.py
import os

def get_project_path():
    """
    :return:返回项目路径
    """
    return os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]

if __name__ == "__main__":
    print(f"项目路径:{get_project_path()}")

选择一个网站并将其写至config配置文件中 ,我选择的是飞猪

config.ini
[product_url]
url = https://www.ctrip.com/

然后我们需要获取这个地址

Common/get_function.py
import os
from configparser import ConfigParser

...

def get_url():
    """
    :return:返回项目地址
    """
    # 实例化ConfigParser
    config = ConfigParser()
    # 读取config.ini配置文件
    config.read(f"{get_project_path()}/config.ini")
    return config.get('product_url', 'url')

if __name__ == "__main__":
    print(f"项目路径:{get_project_path()}")
    print(f"项目地址:{get_url()}")

执行get_function.py文件,以我为例,正确显示项目路径以及项目地址即成功

项目路径:U:\python_project\project\Selenium_Fight
项目地址:https://www.fliggy.com/

二、创建日志

日志功能较为简单,主要介绍都在注释上了。感兴趣的可以自己去研究一下

Common/Log.py

from get_function import get_project_path
import logging
import time

class Log:
    def __init__(self, logger=None):
        # 实例化logger
        self.logger = logging.getLogger(logger)
        # 设置日志级别
        self.logger.setLevel(logging.DEBUG)
        # 定义时间并指定格式
        self.log_time = time.strftime("%Y_%m_%d")
        # 定义路径
        self.log_path = f"{get_project_path()}/Logs/"
        # 定义名字
        self.log_name = f"{self.log_path}{self.log_time}_log.log"
        # 创建FileHandler
        FH = logging.FileHandler(self.log_name, mode="a", encoding="utf-8")
        # 设置FileHandler日志级别
        FH.setLevel(logging.INFO)
        # 定义输出格式
        formatter = logging.Formatter('[%(asctime)s] %(filename)s->line:%(lineno)d [%(levelname)s] %(message)s')
        # 设置格式
        FH.setFormatter(formatter)
        # 新增句柄
        self.logger.addHandler(FH)
        # 记录完成后移除句柄
        # self.logger.removeHandler(FH)
        # 关闭文件
        FH.close()

    def log(self):
        return self.logger

if __name__ == "__main__":
    lo = Log()
    log = lo.log()
    log.debug('This is a debug message!')
    log.info('This is a info message!')
    log.warning('This is a warning message!')
    log.error('This is a error message!')
    log.critical('This is a critical message!')

三、处理Excel测试数据文件

通过openpyxl处理,较为简单,主要介绍也在注释上了。感兴趣的可以自己去研究一下,记得先安装openpyxl

Common/Excle.py

from get_function import get_project_path
import openpyxl

def load_excle(filename, sheet_index):
    # 打开Excel文件
    xl = openpyxl.load_workbook(filename)
    # 打开指定sheet表
    sheet = xl[sheet_index]
    # 加载Excel数据
    Data_list = []
    for j in range(sheet.max_column-1):
        j+=2
        Data = {}
        for i in range(sheet.max_row):
            i+=1
            Data[sheet.cell(row=i, column=1).value] = sheet.cell(row=i, column=j).value
        Data_list.append(Data)
    return Data_list

if __name__ == "__main__":
    data = load_excle(f'{get_project_path()}/Data/TestData.xlsx', '测试数据')
    for i in range(len(data)):
        print(data[i])

# 打印的内容如下
{'出发城市': '苏州', '出发日期': '2020-09-01', '到达城市': '上海', '返程日期': None}
{'出发城市': '上海', '出发日期': '2020-09-02', '到达城市': '南京', '返程日期': None}

-->返回目录