|
|
|
@ -193,8 +193,20 @@ class StepExecutor(QWidget):
|
|
|
|
|
self.tableView.setEditTriggers(QTableView.DoubleClicked)
|
|
|
|
|
self.tableView.setSelectionBehavior(QTableView.SelectRows)
|
|
|
|
|
|
|
|
|
|
# 设置表格显示优化
|
|
|
|
|
self.tableView.setAlternatingRowColors(True) # 交替行颜色
|
|
|
|
|
self.tableView.setShowGrid(True) # 显示网格线
|
|
|
|
|
self.tableView.setGridStyle(Qt.SolidLine) # 实线网格
|
|
|
|
|
self.tableView.setSortingEnabled(False) # 禁用排序避免干扰执行顺序
|
|
|
|
|
|
|
|
|
|
# 设置最小行高
|
|
|
|
|
self.tableView.verticalHeader().setMinimumSectionSize(30)
|
|
|
|
|
|
|
|
|
|
self.setupTableHeaders()
|
|
|
|
|
|
|
|
|
|
# 初始调整所有行高
|
|
|
|
|
self.adjustAllRowHeights()
|
|
|
|
|
|
|
|
|
|
layout.addWidget(QLabel("测试步骤:"))
|
|
|
|
|
layout.addWidget(self.tableView)
|
|
|
|
|
|
|
|
|
@ -212,14 +224,34 @@ class StepExecutor(QWidget):
|
|
|
|
|
try:
|
|
|
|
|
header = self.tableView.horizontalHeader()
|
|
|
|
|
if header:
|
|
|
|
|
header.setStretchLastSection(True)
|
|
|
|
|
header.setSectionResizeMode(0, QHeaderView.ResizeToContents)
|
|
|
|
|
header.setSectionResizeMode(1, QHeaderView.Stretch)
|
|
|
|
|
header.setSectionResizeMode(2, QHeaderView.ResizeToContents)
|
|
|
|
|
header.setSectionResizeMode(3, QHeaderView.ResizeToContents)
|
|
|
|
|
header.setSectionResizeMode(4, QHeaderView.ResizeToContents)
|
|
|
|
|
header.setSectionResizeMode(5, QHeaderView.ResizeToContents)
|
|
|
|
|
header.setSectionResizeMode(6, QHeaderView.ResizeToContents)
|
|
|
|
|
# 设置表格自动调整行高
|
|
|
|
|
self.tableView.verticalHeader().setDefaultSectionSize(35)
|
|
|
|
|
self.tableView.verticalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
|
|
|
|
|
|
|
|
|
|
# 设置列宽模式 - 让表格填充满整个宽度
|
|
|
|
|
header.setStretchLastSection(True) # 让最后一列自动拉伸填充剩余空间
|
|
|
|
|
|
|
|
|
|
# 设置各列的调整模式
|
|
|
|
|
header.setSectionResizeMode(0, QHeaderView.Fixed) # 步骤ID - 固定宽度
|
|
|
|
|
header.setSectionResizeMode(1, QHeaderView.Stretch) # 步骤描述 - 拉伸
|
|
|
|
|
header.setSectionResizeMode(2, QHeaderView.Fixed) # 操作类型 - 固定宽度
|
|
|
|
|
header.setSectionResizeMode(3, QHeaderView.Fixed) # 执行时间 - 固定宽度
|
|
|
|
|
header.setSectionResizeMode(4, QHeaderView.Fixed) # 执行结果 - 固定宽度
|
|
|
|
|
header.setSectionResizeMode(5, QHeaderView.Stretch) # 详细结果 - 拉伸
|
|
|
|
|
header.setSectionResizeMode(6, QHeaderView.Stretch) # 备注 - 拉伸
|
|
|
|
|
|
|
|
|
|
# 设置固定列的宽度
|
|
|
|
|
self.tableView.setColumnWidth(0, 80) # 步骤ID
|
|
|
|
|
self.tableView.setColumnWidth(2, 120) # 操作类型
|
|
|
|
|
self.tableView.setColumnWidth(3, 160) # 执行时间
|
|
|
|
|
self.tableView.setColumnWidth(4, 80) # 执行结果
|
|
|
|
|
|
|
|
|
|
# 设置拉伸列的最小宽度
|
|
|
|
|
header.setMinimumSectionSize(100) # 设置所有列的最小宽度
|
|
|
|
|
|
|
|
|
|
# 启用文本换行
|
|
|
|
|
self.tableView.setWordWrap(True)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"设置表格头部时出错: {e}")
|
|
|
|
|
|
|
|
|
@ -522,6 +554,54 @@ class StepExecutor(QWidget):
|
|
|
|
|
stepInterval = int(self.stepIntervalSpin.value() * 1000)
|
|
|
|
|
self.timer.start(stepInterval)
|
|
|
|
|
|
|
|
|
|
def is_step_successful(self, step):
|
|
|
|
|
"""判断步骤是否执行成功"""
|
|
|
|
|
return (step.get('executed', False) and
|
|
|
|
|
step.get('result') and
|
|
|
|
|
'失败' not in step.get('result', ''))
|
|
|
|
|
|
|
|
|
|
def adjustRowHeight(self, row):
|
|
|
|
|
"""调整指定行的高度以适应内容"""
|
|
|
|
|
try:
|
|
|
|
|
# 获取该行的内容
|
|
|
|
|
stepInfo = self.tableModel.getStepInfo(row)
|
|
|
|
|
if not stepInfo:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
# 计算需要的行高
|
|
|
|
|
description = stepInfo.get('description', '')
|
|
|
|
|
result = stepInfo.get('result', '')
|
|
|
|
|
note = stepInfo.get('note', '')
|
|
|
|
|
|
|
|
|
|
# 基于最长文本计算行高
|
|
|
|
|
max_text_length = max(len(description), len(result), len(note))
|
|
|
|
|
|
|
|
|
|
# 基础行高
|
|
|
|
|
base_height = 35
|
|
|
|
|
|
|
|
|
|
# 根据文本长度动态调整
|
|
|
|
|
if max_text_length > 100:
|
|
|
|
|
height = base_height + (max_text_length // 50) * 15
|
|
|
|
|
elif max_text_length > 50:
|
|
|
|
|
height = base_height + 15
|
|
|
|
|
else:
|
|
|
|
|
height = base_height
|
|
|
|
|
|
|
|
|
|
# 设置行高,最大不超过150像素
|
|
|
|
|
height = min(height, 150)
|
|
|
|
|
self.tableView.setRowHeight(row, height)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"调整行高时出错: {e}")
|
|
|
|
|
|
|
|
|
|
def adjustAllRowHeights(self):
|
|
|
|
|
"""调整所有行的高度"""
|
|
|
|
|
try:
|
|
|
|
|
for row in range(self.tableModel.rowCount()):
|
|
|
|
|
self.adjustRowHeight(row)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"调整所有行高时出错: {e}")
|
|
|
|
|
|
|
|
|
|
def finishExecution(self):
|
|
|
|
|
"""完成执行"""
|
|
|
|
|
self.stopAutoExecute()
|
|
|
|
@ -529,7 +609,7 @@ class StepExecutor(QWidget):
|
|
|
|
|
# 计算最终执行统计
|
|
|
|
|
totalSteps = len([step for step in self.tableModel.stepData])
|
|
|
|
|
executedSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)])
|
|
|
|
|
successSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)])
|
|
|
|
|
successSteps = len([step for step in self.tableModel.stepData if self.is_step_successful(step)])
|
|
|
|
|
failedSteps = executedSteps - successSteps
|
|
|
|
|
successRate = (successSteps/executedSteps*100) if executedSteps > 0 else 0
|
|
|
|
|
|
|
|
|
@ -607,6 +687,10 @@ class StepExecutor(QWidget):
|
|
|
|
|
self.dbManager.updateStepResults(self.currentExecutionId, self.stepResults)
|
|
|
|
|
|
|
|
|
|
success = self.tableModel.updateStepResult(row, result, datetime.now())
|
|
|
|
|
|
|
|
|
|
# 更新表格行高以适应内容
|
|
|
|
|
self.adjustRowHeight(row)
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
def handleStep(self, rowIndex, stepInfo):
|
|
|
|
@ -829,6 +913,9 @@ class StepExecutor(QWidget):
|
|
|
|
|
self.tabLockRequired.emit(False)
|
|
|
|
|
self.updateStatusDisplay("已重置", "blue")
|
|
|
|
|
self.resetCountdown()
|
|
|
|
|
|
|
|
|
|
# 重置后重新调整行高
|
|
|
|
|
self.adjustAllRowHeights()
|
|
|
|
|
|
|
|
|
|
def onExportReportClicked(self):
|
|
|
|
|
"""导出报告点击事件"""
|
|
|
|
@ -940,7 +1027,7 @@ class StepExecutor(QWidget):
|
|
|
|
|
"""添加执行统计表格"""
|
|
|
|
|
totalSteps = len([step for step in self.tableModel.stepData])
|
|
|
|
|
executedSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)])
|
|
|
|
|
successSteps = len([step for step in self.tableModel.stepData if step.get('executed', False) and step.get('result', False)])
|
|
|
|
|
successSteps = len([step for step in self.tableModel.stepData if self.is_step_successful(step)])
|
|
|
|
|
failedSteps = executedSteps - successSteps
|
|
|
|
|
successRate = (successSteps/executedSteps*100) if executedSteps > 0 else 0
|
|
|
|
|
|
|
|
|
@ -1028,7 +1115,7 @@ class StepExecutor(QWidget):
|
|
|
|
|
"""添加执行总结"""
|
|
|
|
|
totalSteps = len([step for step in self.tableModel.stepData])
|
|
|
|
|
executedSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)])
|
|
|
|
|
successSteps = len([step for step in self.tableModel.stepData if step.get('executed', False) and step.get('result', False)])
|
|
|
|
|
successSteps = len([step for step in self.tableModel.stepData if self.is_step_successful(step)])
|
|
|
|
|
failedSteps = executedSteps - successSteps
|
|
|
|
|
successRate = (successSteps/executedSteps*100) if executedSteps > 0 else 0
|
|
|
|
|
|
|
|
|
|