1 Star 0 Fork 0

testlry/jakaweb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
utils.py 5.03 KB
一键复制 编辑 原始数据 按行查看 历史
testlry 提交于 2024-05-31 16:36 . finish this framework
import json
import time
import logging
import os
from selenium import webdriver
from datetime import datetime
from config import BROWSER_URL
class UtilsDriver:
# 类变量用于存储单例的WebDriver实例和日志处理器
jaka_driver = None
logger = None
log_dir = "logs" # 日志文件夹路径
@classmethod
def setup_logger(cls):
"""初始化日志记录器,确保每个类实例共享相同的日志配置"""
if cls.logger is None:
cls.logger = logging.getLogger(__name__)
cls.logger.setLevel(logging.INFO) # 设置日志级别为INFO
# 定义日志格式
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
# 确保日志目录存在
os.makedirs(cls.log_dir, exist_ok=True)
# 限制日志文件数量
cls._prune_logs(cls.log_dir, 5)
# 生成基于日期的文件名
log_filename = cls._generate_log_filename()
# 添加文件处理器到logger
file_handler = logging.FileHandler(log_filename)
file_handler.setFormatter(formatter)
cls.logger.addHandler(file_handler)
return cls.logger
@classmethod
def _prune_logs(cls, log_dir, keep_count):
"""根据指定的数量保留最新的日志文件,删除多余的"""
files = sorted((f for f in os.listdir(log_dir) if f.endswith(".log")), reverse=True)
for file in files[keep_count:]:
os.remove(os.path.join(log_dir, file))
@classmethod
def _generate_log_filename(cls):
"""根据当前日期生成日志文件名"""
return os.path.join(cls.log_dir, f"test_{datetime.now().strftime('%Y-%m-%d-%H-%M-%S')}.log")
@classmethod
def get_driver(cls, browser="chrome"):
"""获取或创建一个新的WebDriver实例,支持Chrome和Firefox"""
if cls.jaka_driver is None:
# 动态选择浏览器选项类
options_class = {
"chrome": webdriver.ChromeOptions,
"firefox": webdriver.FirefoxOptions,
}.get(browser.lower(), None)
if options_class:
options = options_class() # 初始化浏览器选项
try:
# 根据浏览器类型创建WebDriver实例
cls.jaka_driver = getattr(webdriver, browser.capitalize())(options=options)
cls.jaka_driver.maximize_window() # 最大化浏览器窗口
cls.jaka_driver.get(BROWSER_URL) # 打开登录页面
cls.jaka_driver.implicitly_wait(20) # 设置隐式等待时间
except Exception as e:
cls.setup_logger().error(f"初始化WebDriver时发生错误: {e}")
return cls.jaka_driver
@classmethod
def quit_driver(cls):
"""关闭WebDriver实例并清理资源"""
if cls.jaka_driver:
cls.jaka_driver.quit()
cls.jaka_driver = None
@staticmethod
def read_json(filename):
"""读取JSON文件内容,异常时记录日志并返回None"""
try:
with open(filename, "r", encoding="utf-8") as f:
return json.load(f)
except Exception as e:
UtilsDriver.setup_logger().error(f"读取JSON文件时出错: {e}")
return None
@staticmethod
def write_json(file_path, data):
"""将数据写入JSON文件,异常时记录日志"""
try:
with open(file_path, "w", encoding="utf-8") as file:
json.dump(data, file, ensure_ascii=False, indent=4)
except Exception as e:
UtilsDriver.setup_logger().error(f"写入JSON文件时出错: {e}")
@staticmethod
def get_case_data(filename):
"""从JSON文件中提取测试用例数据,返回数据元组列表"""
try:
with open(filename, encoding="utf-8") as f:
case_data = json.load(f)
return [tuple(data.values()) for data in case_data.values()] # 转换为元组列表
except Exception as e:
UtilsDriver.setup_logger().error(f"读取测试数据文件时出错: {e}")
return None
@staticmethod
def get_screen_png(path):
"""捕获当前页面截图并保存至指定路径"""
try:
time.sleep(2) # 等待2秒,确保页面加载完成
UtilsDriver.get_driver().get_screenshot_as_file(path)
except Exception as e:
UtilsDriver.setup_logger().error(f"截图时出错: {e}")
@staticmethod
def scroll_page(driver, y_position=1000):
"""滚动页面到指定垂直位置"""
try:
js_code = f"window.scrollTo(0, {y_position})" # 滚动页面的JavaScript代码
driver.execute_script(js_code) # 执行脚本
except Exception as e:
UtilsDriver.setup_logger().error(f"滚动页面时出错: {e}")
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/the-wise-never-fall-in-love/jaka_web_autoiframe.git
git@gitee.com:the-wise-never-fall-in-love/jaka_web_autoiframe.git
the-wise-never-fall-in-love
jaka_web_autoiframe
jakaweb
master

搜索帮助