提交 70f75cc1 authored 作者: 陈泽健's avatar 陈泽健

补充代办事宜模块流程的JSON数据自动化测试。

上级 c530b7f8
/预定系统/log
/预定系统/reports/
/预定系统/reports/imgs/
\ No newline at end of file
...@@ -40,6 +40,9 @@ def dingding_send_message(error_log_url,ding_type): ...@@ -40,6 +40,9 @@ def dingding_send_message(error_log_url,ding_type):
elif ding_type == '展厅预定系统-对外服务服务监测': elif ding_type == '展厅预定系统-对外服务服务监测':
log_type = '展厅预定-对外服务日志出现异常' log_type = '展厅预定-对外服务日志出现异常'
elif ding_type == '展厅运维集控系统-服务监测':
log_type = '展厅运维集控系统-服务监测'
logging.info(f"预定服务日志类型:{log_type}") logging.info(f"预定服务日志类型:{log_type}")
# 生成时间戳 # 生成时间戳
......
...@@ -336,11 +336,11 @@ if __name__ == "__main__": ...@@ -336,11 +336,11 @@ if __name__ == "__main__":
"logs": [ "logs": [
{ {
"log_path": "/var/www/java/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log", "log_path": "/var/www/java/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log",
"ding_type": "235标准预定-对内服务服务监测" "ding_type": "235标准预定-对内服务监测"
}, },
{ {
"log_path": "/var/www/java/external-meeting-api/logs/ubains-INFO-AND-ERROR.log", "log_path": "/var/www/java/external-meeting-api/logs/ubains-INFO-AND-ERROR.log",
"ding_type": "235标准预定-对外服务服务监测" "ding_type": "235标准预定-对外服务监测"
} }
] ]
}, },
...@@ -352,11 +352,23 @@ if __name__ == "__main__": ...@@ -352,11 +352,23 @@ if __name__ == "__main__":
"logs": [ "logs": [
{ {
"log_path": "/var/www/java/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log", "log_path": "/var/www/java/api-java-meeting2.0/logs/ubains-INFO-AND-ERROR.log",
"ding_type": "展厅预定系统-对内服务服务监测" "ding_type": "展厅预定系统-对内服务监测"
}, },
{ {
"log_path": "/var/www/java/external-meeting-api/logs/ubains-INFO-AND-ERROR.log", "log_path": "/var/www/java/external-meeting-api/logs/ubains-INFO-AND-ERROR.log",
"ding_type": "展厅预定系统-对内服务服务监测" "ding_type": "展厅预定系统-对内服务监测"
}
]
},
{
"host": "192.168.5.200",
"username": "root",
"private_key_path": "C:/Users/UBAINS/.ssh/id_rsa",
"passphrase": "Ubains@123",
"logs": [
{
"log_path": "/var/www/html/log/uinfo.log",
"ding_type": "展厅运维集控系统-服务监测"
} }
] ]
} }
......
...@@ -313,4 +313,4 @@ ...@@ -313,4 +313,4 @@
90. 2025-06-05: 90. 2025-06-05:
- 兰州中石化项目输出角色权限组的部分JSON数据,调试自动化运行。排查展厅自动化失败问题,处理chrome版本升级后,chromedriver版本没对上问题。 - 兰州中石化项目输出角色权限组的部分JSON数据,调试自动化运行。排查展厅自动化失败问题,处理chrome版本升级后,chromedriver版本没对上问题。
91. 2025-06-10: 91. 2025-06-10:
- 兰州中石化项目输出议题申报流程的JSON数据,调试自动化运行。 - 兰州中石化项目输出议题申报流程的JSON数据,调试自动化运行。补充代办事宜模块流程的JSON数据自动化测试。
\ No newline at end of file \ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..','..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("兰州中石化项目测试环境")
user_login("test@user2", "Ubains@1357")
sleep(2)
wd = GSTORE['wd']
sleep(1)
# 点击【议题申报】按钮进入模块
INFO("点击【代办事宜】按钮")
safe_click((By.XPATH, "//div[@id='TodoList']"), wd)
sleep(1)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..' , '..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
# 构建XLSX文件的绝对路径
xlsx_file_path = os.path.join(预定系统_path, '测试数据', '兰州中石化项目测试用例.xlsx')
class AgencyMatters:
tags = ['兰州中石化项目代办事宜']
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 兰州中石化项目代办事宜测试报告 --report_url_prefix http://nat.ubainsyun.com:31135 --tag 兰州中石化项目代办事宜
"""
ddt_cases = read_xlsx_data(xlsx_file_path, sheet_name='代办事宜',case_type="兰州中石化项目25-05-24")
# 测试开始前调用clear_columns_in_xlsx函数,将测试用例中的测试结果和日志截图置空
# clear_columns_in_xlsx(xlsx_file_path, sheet_name='会议创建', columns_to_clear=['测试结果', '测试频次', '日志截图'])
def teststeps(self):
"""
执行测试步骤函数,主要用于执行读取的测试用例并进行信息统计模块功能测试操作
"""
# 从全局存储中获取webdriver对象
wd = GSTORE['wd']
name = self.name
# 刷新页面
wd.refresh()
wd.refresh()
for step in self.para:
# 赋值页面类型page
page_type = step.get('page')
# 赋值元素定位类型,并将字符串转为Enum类型
locator_type = get_by_enum(step.get('locator_type'))
# 赋值元素值
locator_value = step.get('locator_value')
# 赋值元素类型,例如:click点击、input输入框等
element_type = step.get('element_type')
# 赋值元素值,例如输入框的输入值
element_value = step.get('element_value')
# 赋值预期结果
expented_result = step.get('expented_result')
# 赋值等待时间
# sleep_time = step.get('sleep_time')
INFO(f"页面: {page_type}、元素定位类型: {locator_type}、元素定位值: {locator_value}、元素类型: {element_type}、元素值: {element_value}、预期结果: {expented_result}")
if element_type == "click":
safe_click((locator_type, locator_value), wd)
sleep(2)
SELENIUM_LOG_SCREEN(wd, "75")
elif element_type == "input":
safe_send_keys((locator_type, locator_value), element_value, wd)
sleep(2)
SELENIUM_LOG_SCREEN(wd, "75")
elif element_type == "login":
safe_click((By.XPATH, "//div[contains(@class,'quit')]"), wd)
sleep(2)
user_login(element_value[0],element_value[1])
sleep(2)
elif element_type == "getTips":
notify_text = get_notify_text(wd, (locator_type, locator_value))
INFO(f"获取到的提示信息为:{notify_text}")
sleep(2)
CHECK_POINT(f"获取到的提示信息为:{notify_text}", expented_result in notify_text)
SELENIUM_LOG_SCREEN(wd, "75")
elif element_type == "getText":
text = elment_get_text((locator_type, locator_value), wd)
INFO(f"获取到的文本信息为:{text}")
CHECK_POINT(f"获取到的文本信息为:{text}", expented_result in text)
SELENIUM_LOG_SCREEN(wd, "75")
\ No newline at end of file
...@@ -56,20 +56,19 @@ class TopicDeclaration: ...@@ -56,20 +56,19 @@ class TopicDeclaration:
element_value = step.get('element_value') element_value = step.get('element_value')
# 赋值预期结果 # 赋值预期结果
expented_result = step.get('expented_result') expented_result = step.get('expented_result')
# 赋值等待时间
# sleep_time = step.get('sleep_time')
INFO(f"页面: {page_type}、元素定位类型: {locator_type}、元素定位值: {locator_value}、元素类型: {element_type}、元素值: {element_value}、预期结果: {expented_result}") INFO(f"页面: {page_type}、元素定位类型: {locator_type}、元素定位值: {locator_value}、元素类型: {element_type}、元素值: {element_value}、预期结果: {expented_result}")
if element_type == "click": if element_type == "click":
safe_click((locator_type, locator_value), wd) safe_click((locator_type, locator_value), wd)
sleep(4)
SELENIUM_LOG_SCREEN(wd, "75") SELENIUM_LOG_SCREEN(wd, "75")
elif element_type == "input": elif element_type == "input":
safe_send_keys((locator_type, locator_value), element_value, wd) safe_send_keys((locator_type, locator_value), element_value, wd)
sleep(4)
SELENIUM_LOG_SCREEN(wd, "75") SELENIUM_LOG_SCREEN(wd, "75")
elif element_type == "getTips": elif element_type == "getTips":
notify_text = get_notify_text(wd, (locator_type, locator_value)) notify_text = get_notify_text(wd, (locator_type, locator_value))
INFO(f"获取到的提示信息为:{notify_text}") INFO(f"获取到的提示信息为:{notify_text}")
sleep(4)
CHECK_POINT(f"获取到的提示信息为:{notify_text}", expented_result in notify_text) CHECK_POINT(f"获取到的提示信息为:{notify_text}", expented_result in notify_text)
SELENIUM_LOG_SCREEN(wd, "75") SELENIUM_LOG_SCREEN(wd, "75")
......
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目议题申报测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目议题申报测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 15:20:56</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 15:20:56</td>
</tr>
<tr>
<td>耗时</td>
<td>0.054 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>3</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>0</td>
</tr>
<tr>
<td>通过</td>
<td>0</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="">0</td>
</tr>
<tr>
<td>阻塞</td>
<td style="color:red">3</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="color:red">1</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="color:red">1</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 100% : 3 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 100.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
</div>
<div class="suite_setup setup fail" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:20:56</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">输入用户名:admin</div>
<div class="info error-info">suite setup fail | 'NoneType' object has no attribute 'find_element'
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\cases\项目定制\兰州中石化项目25-05-24\议题申报\__st__.py&quot;, line 17, in suite_setup
user_login(&quot;admin&quot;, &quot;Ubains@4321&quot;)
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\Base\base.py&quot;, line 172, in user_login
safe_send_keys((By.XPATH, &quot;//input[@placeholder='请输入账号或手机号或邮箱号']&quot;), f'{username}', wd)
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\Base\base.py&quot;, line 223, in safe_send_keys
element = WebDriverWait(wd, 20).until(EC.visibility_of_element_located(element_locator))
File &quot;E:\Python\lib\site-packages\selenium\webdriver\support\wait.py&quot;, line 137, in until
value = method(self._driver)
File &quot;E:\Python\lib\site-packages\selenium\webdriver\support\expected_conditions.py&quot;, line 224, in _predicate
return _element_if_visible(driver.find_element(*locator))
AttributeError: 'NoneType' object has no attribute 'find_element'
</div>
</div>
</div>
<div class="suite_teardown teardown fail" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 15:20:56</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
<div class="info error-info">suite teardown fail | 'NoneType' object has no attribute 'quit'
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\cases\__st__.py&quot;, line 24, in suite_teardown
browser_quit()
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\Base\base.py&quot;, line 752, in browser_quit
wd.quit()
AttributeError: 'NoneType' object has no attribute 'quit'
</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="block">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目议题申报测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目议题申报测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 15:32:23</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 15:33:25</td>
</tr>
<tr>
<td>耗时</td>
<td>62.419 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>3</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>3</td>
</tr>
<tr>
<td>通过</td>
<td>1</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="color:red">2</td>
</tr>
<tr>
<td>阻塞</td>
<td style="">0</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 33.3% : 1 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 33.3%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 66.7% : 2 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 66.7%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
</div>
<div class="suite_setup setup" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:32:23</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">'----------' 浏览器初始化完成 '----------'</div>
<div class="info">输入用户名:admin</div>
<div class="info">输入密码:Ubains@4321</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
</div>
</div>
</div>
<div class="suite_file" id="suite_file cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py">
<div>
<span class="label">进入文件</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py</span>
</div>
<div class="case pass" id="case_00000001">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">议题申报001</span>
<span class="executetime">2025-06-10 15:32:33</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报001">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body/div[@class='el-dialog__wrapper']/div[@aria-label='dialog']/div[@class='el-dialog__body']/div[@class='dialog_content']/div[1]/div[2]/div[1]/div[1]、元素类型: getText、元素值: 、预期结果: admin</div>
<div class="info">获取到的文本信息为:申报人:
admin</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:申报人:
admin</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153234961855.png" width="50">
</div>
</div>
</div>
</div>
<div class="case abort" id="case_00000002">
<div class="folder_header">
<span class="label caselabel">用例 ABORT</span>
<span class="casename">议题申报003</span>
<span class="executetime">2025-06-10 15:32:41</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报003">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: 请输入议题名称</div>
<div class="info">Exception occurred: Message:
Stacktrace:
GetHandleVerifier [0x0x7ff6548a91f5+2853845]
GetHandleVerifier [0x0x7ff654603ac0+79008]
(No symbol) [0x0x7ff6543c9bda]
(No symbol) [0x0x7ff6544200f6]
(No symbol) [0x0x7ff6544203ac]
(No symbol) [0x0x7ff654473b07]
(No symbol) [0x0x7ff6544484ff]
(No symbol) [0x0x7ff6544708f5]
(No symbol) [0x0x7ff654448293]
(No symbol) [0x0x7ff654411061]
(No symbol) [0x0x7ff654411df3]
GetHandleVerifier [0x0x7ff6548d410d+3029741]
GetHandleVerifier [0x0x7ff6548ce52d+3006221]
GetHandleVerifier [0x0x7ff6548ed5b2+3133330]
GetHandleVerifier [0x0x7ff65461d98e+185198]
GetHandleVerifier [0x0x7ff654624edf+215231]
GetHandleVerifier [0x0x7ff65460c324+113924]
GetHandleVerifier [0x0x7ff65460c4d9+114361]
GetHandleVerifier [0x0x7ff6545f3208+11240]
BaseThreadInitThunk [0x0x7ffb2264e8d7+23]
RtlUserThreadStart [0x0x7ffb2449c5dc+44]
</div>
<div class="info">获取到的提示信息为:None</div>
<div class="info error-info">argument of type 'NoneType' is not iterable
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py&quot;, line 65, in teststeps
CHECK_POINT(f&quot;获取到的提示信息为:{notify_text}&quot;, expented_result in notify_text)
TypeError: argument of type 'NoneType' is not iterable
</div>
</div>
</div>
</div>
<div class="case abort" id="case_00000003">
<div class="folder_header">
<span class="label caselabel">用例 ABORT</span>
<span class="casename">议题申报004</span>
<span class="executetime">2025-06-10 15:33:06</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报004">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info error-info">Message: element click intercepted: Element &lt;div data-v-6ef76e62=&quot;&quot; data-v-b2520026=&quot;&quot; class=&quot;nav_item&quot; id=&quot;CreateTopic&quot;&gt;...&lt;/div&gt; is not clickable at point (191, 358). Other element would receive the click: &lt;div data-v-b7819456=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
(Session info: chrome=137.0.7151.41)
Stacktrace:
GetHandleVerifier [0x0x7ff6548a91f5+2853845]
GetHandleVerifier [0x0x7ff654603ac0+79008]
(No symbol) [0x0x7ff6543c9bda]
(No symbol) [0x0x7ff6544280e9]
(No symbol) [0x0x7ff654425a8b]
(No symbol) [0x0x7ff654422ad1]
(No symbol) [0x0x7ff6544219d1]
(No symbol) [0x0x7ff654413004]
(No symbol) [0x0x7ff6544484ba]
(No symbol) [0x0x7ff6544128b6]
(No symbol) [0x0x7ff6544486d0]
(No symbol) [0x0x7ff6544708f5]
(No symbol) [0x0x7ff654448293]
(No symbol) [0x0x7ff654411061]
(No symbol) [0x0x7ff654411df3]
GetHandleVerifier [0x0x7ff6548d410d+3029741]
GetHandleVerifier [0x0x7ff6548ce52d+3006221]
GetHandleVerifier [0x0x7ff6548ed5b2+3133330]
GetHandleVerifier [0x0x7ff65461d98e+185198]
GetHandleVerifier [0x0x7ff654624edf+215231]
GetHandleVerifier [0x0x7ff65460c324+113924]
GetHandleVerifier [0x0x7ff65460c4d9+114361]
GetHandleVerifier [0x0x7ff6545f3208+11240]
BaseThreadInitThunk [0x0x7ffb2264e8d7+23]
RtlUserThreadStart [0x0x7ffb2449c5dc+44]
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py&quot;, line 37, in teststeps
safe_click((By.XPATH, &quot;//div[@id='CreateTopic']&quot;), wd)
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\Base\base.py&quot;, line 252, in safe_click
element.click()
File &quot;E:\Python\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 119, in click
self._execute(Command.CLICK_ELEMENT)
File &quot;E:\Python\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 572, in _execute
return self._parent.execute(command, params)
File &quot;E:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 448, in execute
self.error_handler.check_response(response)
File &quot;E:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 232, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;div data-v-6ef76e62=&quot;&quot; data-v-b2520026=&quot;&quot; class=&quot;nav_item&quot; id=&quot;CreateTopic&quot;&gt;...&lt;/div&gt; is not clickable at point (191, 358). Other element would receive the click: &lt;div data-v-b7819456=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
(Session info: chrome=137.0.7151.41)
Stacktrace:
GetHandleVerifier [0x0x7ff6548a91f5+2853845]
GetHandleVerifier [0x0x7ff654603ac0+79008]
(No symbol) [0x0x7ff6543c9bda]
(No symbol) [0x0x7ff6544280e9]
(No symbol) [0x0x7ff654425a8b]
(No symbol) [0x0x7ff654422ad1]
(No symbol) [0x0x7ff6544219d1]
(No symbol) [0x0x7ff654413004]
(No symbol) [0x0x7ff6544484ba]
(No symbol) [0x0x7ff6544128b6]
(No symbol) [0x0x7ff6544486d0]
(No symbol) [0x0x7ff6544708f5]
(No symbol) [0x0x7ff654448293]
(No symbol) [0x0x7ff654411061]
(No symbol) [0x0x7ff654411df3]
GetHandleVerifier [0x0x7ff6548d410d+3029741]
GetHandleVerifier [0x0x7ff6548ce52d+3006221]
GetHandleVerifier [0x0x7ff6548ed5b2+3133330]
GetHandleVerifier [0x0x7ff65461d98e+185198]
GetHandleVerifier [0x0x7ff654624edf+215231]
GetHandleVerifier [0x0x7ff65460c324+113924]
GetHandleVerifier [0x0x7ff65460c4d9+114361]
GetHandleVerifier [0x0x7ff6545f3208+11240]
BaseThreadInitThunk [0x0x7ffb2264e8d7+23]
RtlUserThreadStart [0x0x7ffb2449c5dc+44]
</div>
</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:33:07</span>
</div>
<div class="folder_body"></div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 15:33:09</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="block">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目议题申报测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目议题申报测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 15:36:24</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 15:38:16</td>
</tr>
<tr>
<td>耗时</td>
<td>112.179 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>3</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>3</td>
</tr>
<tr>
<td>通过</td>
<td>3</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="">0</td>
</tr>
<tr>
<td>阻塞</td>
<td style="">0</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 100% : 3 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 100.0%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
</div>
<div class="suite_setup setup" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:36:24</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">'----------' 浏览器初始化完成 '----------'</div>
<div class="info">输入用户名:admin</div>
<div class="info">输入密码:Ubains@4321</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
</div>
</div>
</div>
<div class="suite_file" id="suite_file cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py">
<div>
<span class="label">进入文件</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py</span>
</div>
<div class="case pass" id="case_00000001">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">议题申报001</span>
<span class="executetime">2025-06-10 15:36:38</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报001">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body/div[@class='el-dialog__wrapper']/div[@aria-label='dialog']/div[@class='el-dialog__body']/div[@class='dialog_content']/div[1]/div[2]/div[1]/div[1]、元素类型: getText、元素值: 、预期结果: admin</div>
<div class="info">获取到的文本信息为:申报人:
admin</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:申报人:
admin</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153639402739.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000002">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">议题申报003</span>
<span class="executetime">2025-06-10 15:36:42</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报003">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-topic-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: 请输入议题名称</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153645836984.png" width="50%">
</div>
<div class="info">获取到的提示信息为:请输入议题名称</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:请输入议题名称</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153647998160.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000003">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">议题申报004</span>
<span class="executetime">2025-06-10 15:36:50</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报004">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-name-input']、元素类型: input、元素值: 议题申报测试003、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-type-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[@x-placement='bottom-start']//li[2]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //textarea[@id='create-topic-remarks-textarea']、元素类型: input、元素值: 测试上会依据、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@placeholder='请选择责任单位']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //span[contains(text(),'测试部门')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='tree-selector-confirm']//span[contains(text(),'确定')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-reporter-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[@x-placement='bottom-start']//span[contains(text(),'陈部门领导')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-proposed-meeting-time-datepicker']、元素类型: input、元素值: 2025-06-25、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-reporting-duration-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //span[contains(text(),'15分钟')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-department-leader-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //li[@class='el-select-dropdown__item']//span[contains(text(),'陈部门领导')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-company-leader-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[@x-placement='bottom-start']//span[contains(text(),'范公司主管领导')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-commission-leader-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //li[@class='el-select-dropdown__item hover']//span[contains(text(),'陈公司委托领导')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">TimeoutException: Element ('xpath', &quot;//li[@class='el-select-dropdown__item hover']//span[contains(text(),'陈公司委托领导')]&quot;) not found or not clickable within 20 seconds.</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-topic-submit-button']//span[contains(text(),'提交')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: 提交成功</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153753455878.png" width="50%">
</div>
<div class="info">获取到的提示信息为:提交成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:提交成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153755613613.png" width="75">
</div>
</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:37:57</span>
</div>
<div class="folder_body"></div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 15:38:00</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="none">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目代办事宜测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目代办事宜测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 19:48:02</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 19:49:06</td>
</tr>
<tr>
<td>耗时</td>
<td>64.119 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>5</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>5</td>
</tr>
<tr>
<td>通过</td>
<td>5</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="">0</td>
</tr>
<tr>
<td>阻塞</td>
<td style="">0</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 100% : 5 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 100.0%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
</div>
<div class="suite_setup setup" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
<span class="executetime">2025-06-10 19:48:02</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">'----------' 浏览器初始化完成 '----------'</div>
<div class="info">输入用户名:test@user2</div>
<div class="info">输入密码:Ubains@1357</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
<div class="info">点击【代办事宜】按钮</div>
</div>
</div>
</div>
<div class="suite_file" id="suite_file cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py">
<div>
<span class="label">进入文件</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py</span>
</div>
<div class="case pass" id="case_00000001">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜001</span>
<span class="executetime">2025-06-10 19:48:09</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜001">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //div[@class='content']//div[1]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 自动化、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194816304368.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/button[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194818619813.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194818817806.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000002">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜002</span>
<span class="executetime">2025-06-10 19:48:18</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜002">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //div[@class='content']//div[1]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 自动化、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194821336657.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/button[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194823574591.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194823741103.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000003">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜003</span>
<span class="executetime">2025-06-10 19:48:23</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜003">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194826462447.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'cell')][contains(text(),'陈部门领导')]、元素类型: getText、元素值: 、预期结果: 陈部门领导</div>
<div class="info">获取到的文本信息为:陈部门领导</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:陈部门领导</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194826651822.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000004">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜004</span>
<span class="executetime">2025-06-10 19:48:26</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜004">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194829342155.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-meeting-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194831583610.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: 、元素类型: login、元素值: 、预期结果: </div>
<div class="info">输入用户名:test@user1</div>
<div class="info">输入密码:Ubains@1357</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194838427059.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'cell')][contains(text(),'范公司主管领导')]、元素类型: getText、元素值: 、预期结果: 范公司主管领导</div>
<div class="info">获取到的文本信息为:范公司主管领导</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:范公司主管领导</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194838617856.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000005">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜005</span>
<span class="executetime">2025-06-10 19:48:38</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜005">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194841383828.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-meeting-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194843608797.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'content')]//div[2]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 、预期结果: 自动化</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194845861002.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[2]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194848084560.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194848271888.png" width="75">
</div>
</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
<span class="executetime">2025-06-10 19:48:48</span>
</div>
<div class="folder_body"></div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 19:48:50</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="none">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目代办事宜测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目代办事宜测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 19:57:23</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 19:58:35</td>
</tr>
<tr>
<td>耗时</td>
<td>71.938 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>5</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>5</td>
</tr>
<tr>
<td>通过</td>
<td>5</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="">0</td>
</tr>
<tr>
<td>阻塞</td>
<td style="">0</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 100% : 5 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 100.0%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
</div>
<div class="suite_setup setup" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
<span class="executetime">2025-06-10 19:57:23</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">'----------' 浏览器初始化完成 '----------'</div>
<div class="info">输入用户名:test@user2</div>
<div class="info">输入密码:Ubains@1357</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
<div class="info">点击【代办事宜】按钮</div>
</div>
</div>
</div>
<div class="suite_file" id="suite_file cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py">
<div>
<span class="label">进入文件</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py</span>
</div>
<div class="case pass" id="case_00000001">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜001</span>
<span class="executetime">2025-06-10 19:57:31</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜001">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //div[@class='content']//div[1]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 自动化、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195739814315.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/button[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195742122302.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195742317923.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000002">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜002</span>
<span class="executetime">2025-06-10 19:57:42</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜002">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //div[@class='content']//div[1]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 自动化、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195744812401.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/button[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195747087141.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195747270608.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000003">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜003</span>
<span class="executetime">2025-06-10 19:57:47</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜003">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195749967534.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'cell')][contains(text(),'陈部门领导')]、元素类型: getText、元素值: 、预期结果: 陈部门领导</div>
<div class="info">获取到的文本信息为:陈部门领导</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:陈部门领导</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195750148386.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000004">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜004</span>
<span class="executetime">2025-06-10 19:57:50</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜004">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195752851935.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-meeting-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195755079609.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: 审批成功</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195755240409.png" width="50%">
</div>
<div class="info">获取到的提示信息为:审批成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:审批成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195757410119.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: 、元素类型: login、元素值: ['test@user1', 'Ubains@1357']、预期结果: </div>
<div class="info">输入用户名:test@user1</div>
<div class="info">输入密码:Ubains@1357</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195804197836.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'cell')][contains(text(),'范公司主管领导')]、元素类型: getText、元素值: 、预期结果: 范公司主管领导</div>
<div class="info">获取到的文本信息为:范公司主管领导</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:范公司主管领导</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195804417002.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000005">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜005</span>
<span class="executetime">2025-06-10 19:58:04</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜005">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195807186779.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-meeting-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195809426860.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195809623572.png" width="50%">
</div>
<div class="info">获取到的提示信息为:审批成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:审批成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195811795301.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'content')]//div[2]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 、预期结果: 自动化</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195814057312.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[2]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195816309826.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195816507662.png" width="75">
</div>
</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
<span class="executetime">2025-06-10 19:58:16</span>
</div>
<div class="folder_body"></div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 19:58:18</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="none">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目议题申报测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目议题申报测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 15:20:56</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 15:20:56</td>
</tr>
<tr>
<td>耗时</td>
<td>0.054 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>3</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>0</td>
</tr>
<tr>
<td>通过</td>
<td>0</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="">0</td>
</tr>
<tr>
<td>阻塞</td>
<td style="color:red">3</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="color:red">1</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="color:red">1</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 100% : 3 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 100.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
</div>
<div class="suite_setup setup fail" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:20:56</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">输入用户名:admin</div>
<div class="info error-info">suite setup fail | 'NoneType' object has no attribute 'find_element'
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\cases\项目定制\兰州中石化项目25-05-24\议题申报\__st__.py&quot;, line 17, in suite_setup
user_login(&quot;admin&quot;, &quot;Ubains@4321&quot;)
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\Base\base.py&quot;, line 172, in user_login
safe_send_keys((By.XPATH, &quot;//input[@placeholder='请输入账号或手机号或邮箱号']&quot;), f'{username}', wd)
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\Base\base.py&quot;, line 223, in safe_send_keys
element = WebDriverWait(wd, 20).until(EC.visibility_of_element_located(element_locator))
File &quot;E:\Python\lib\site-packages\selenium\webdriver\support\wait.py&quot;, line 137, in until
value = method(self._driver)
File &quot;E:\Python\lib\site-packages\selenium\webdriver\support\expected_conditions.py&quot;, line 224, in _predicate
return _element_if_visible(driver.find_element(*locator))
AttributeError: 'NoneType' object has no attribute 'find_element'
</div>
</div>
</div>
<div class="suite_teardown teardown fail" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 15:20:56</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
<div class="info error-info">suite teardown fail | 'NoneType' object has no attribute 'quit'
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\cases\__st__.py&quot;, line 24, in suite_teardown
browser_quit()
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\Base\base.py&quot;, line 752, in browser_quit
wd.quit()
AttributeError: 'NoneType' object has no attribute 'quit'
</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="block">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目议题申报测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目议题申报测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 15:32:23</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 15:33:25</td>
</tr>
<tr>
<td>耗时</td>
<td>62.419 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>3</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>3</td>
</tr>
<tr>
<td>通过</td>
<td>1</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="color:red">2</td>
</tr>
<tr>
<td>阻塞</td>
<td style="">0</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 33.3% : 1 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 33.3%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 66.7% : 2 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 66.7%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
</div>
<div class="suite_setup setup" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:32:23</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">'----------' 浏览器初始化完成 '----------'</div>
<div class="info">输入用户名:admin</div>
<div class="info">输入密码:Ubains@4321</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
</div>
</div>
</div>
<div class="suite_file" id="suite_file cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py">
<div>
<span class="label">进入文件</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py</span>
</div>
<div class="case pass" id="case_00000001">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">议题申报001</span>
<span class="executetime">2025-06-10 15:32:33</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报001">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body/div[@class='el-dialog__wrapper']/div[@aria-label='dialog']/div[@class='el-dialog__body']/div[@class='dialog_content']/div[1]/div[2]/div[1]/div[1]、元素类型: getText、元素值: 、预期结果: admin</div>
<div class="info">获取到的文本信息为:申报人:
admin</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:申报人:
admin</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153234961855.png" width="50">
</div>
</div>
</div>
</div>
<div class="case abort" id="case_00000002">
<div class="folder_header">
<span class="label caselabel">用例 ABORT</span>
<span class="casename">议题申报003</span>
<span class="executetime">2025-06-10 15:32:41</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报003">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: 请输入议题名称</div>
<div class="info">Exception occurred: Message:
Stacktrace:
GetHandleVerifier [0x0x7ff6548a91f5+2853845]
GetHandleVerifier [0x0x7ff654603ac0+79008]
(No symbol) [0x0x7ff6543c9bda]
(No symbol) [0x0x7ff6544200f6]
(No symbol) [0x0x7ff6544203ac]
(No symbol) [0x0x7ff654473b07]
(No symbol) [0x0x7ff6544484ff]
(No symbol) [0x0x7ff6544708f5]
(No symbol) [0x0x7ff654448293]
(No symbol) [0x0x7ff654411061]
(No symbol) [0x0x7ff654411df3]
GetHandleVerifier [0x0x7ff6548d410d+3029741]
GetHandleVerifier [0x0x7ff6548ce52d+3006221]
GetHandleVerifier [0x0x7ff6548ed5b2+3133330]
GetHandleVerifier [0x0x7ff65461d98e+185198]
GetHandleVerifier [0x0x7ff654624edf+215231]
GetHandleVerifier [0x0x7ff65460c324+113924]
GetHandleVerifier [0x0x7ff65460c4d9+114361]
GetHandleVerifier [0x0x7ff6545f3208+11240]
BaseThreadInitThunk [0x0x7ffb2264e8d7+23]
RtlUserThreadStart [0x0x7ffb2449c5dc+44]
</div>
<div class="info">获取到的提示信息为:None</div>
<div class="info error-info">argument of type 'NoneType' is not iterable
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py&quot;, line 65, in teststeps
CHECK_POINT(f&quot;获取到的提示信息为:{notify_text}&quot;, expented_result in notify_text)
TypeError: argument of type 'NoneType' is not iterable
</div>
</div>
</div>
</div>
<div class="case abort" id="case_00000003">
<div class="folder_header">
<span class="label caselabel">用例 ABORT</span>
<span class="casename">议题申报004</span>
<span class="executetime">2025-06-10 15:33:06</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报004">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info error-info">Message: element click intercepted: Element &lt;div data-v-6ef76e62=&quot;&quot; data-v-b2520026=&quot;&quot; class=&quot;nav_item&quot; id=&quot;CreateTopic&quot;&gt;...&lt;/div&gt; is not clickable at point (191, 358). Other element would receive the click: &lt;div data-v-b7819456=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
(Session info: chrome=137.0.7151.41)
Stacktrace:
GetHandleVerifier [0x0x7ff6548a91f5+2853845]
GetHandleVerifier [0x0x7ff654603ac0+79008]
(No symbol) [0x0x7ff6543c9bda]
(No symbol) [0x0x7ff6544280e9]
(No symbol) [0x0x7ff654425a8b]
(No symbol) [0x0x7ff654422ad1]
(No symbol) [0x0x7ff6544219d1]
(No symbol) [0x0x7ff654413004]
(No symbol) [0x0x7ff6544484ba]
(No symbol) [0x0x7ff6544128b6]
(No symbol) [0x0x7ff6544486d0]
(No symbol) [0x0x7ff6544708f5]
(No symbol) [0x0x7ff654448293]
(No symbol) [0x0x7ff654411061]
(No symbol) [0x0x7ff654411df3]
GetHandleVerifier [0x0x7ff6548d410d+3029741]
GetHandleVerifier [0x0x7ff6548ce52d+3006221]
GetHandleVerifier [0x0x7ff6548ed5b2+3133330]
GetHandleVerifier [0x0x7ff65461d98e+185198]
GetHandleVerifier [0x0x7ff654624edf+215231]
GetHandleVerifier [0x0x7ff65460c324+113924]
GetHandleVerifier [0x0x7ff65460c4d9+114361]
GetHandleVerifier [0x0x7ff6545f3208+11240]
BaseThreadInitThunk [0x0x7ffb2264e8d7+23]
RtlUserThreadStart [0x0x7ffb2449c5dc+44]
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py&quot;, line 37, in teststeps
safe_click((By.XPATH, &quot;//div[@id='CreateTopic']&quot;), wd)
File &quot;E:\GithubData\自动化\ubains-module-test\预定系统\Base\base.py&quot;, line 252, in safe_click
element.click()
File &quot;E:\Python\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 119, in click
self._execute(Command.CLICK_ELEMENT)
File &quot;E:\Python\lib\site-packages\selenium\webdriver\remote\webelement.py&quot;, line 572, in _execute
return self._parent.execute(command, params)
File &quot;E:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py&quot;, line 448, in execute
self.error_handler.check_response(response)
File &quot;E:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quot;, line 232, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element &lt;div data-v-6ef76e62=&quot;&quot; data-v-b2520026=&quot;&quot; class=&quot;nav_item&quot; id=&quot;CreateTopic&quot;&gt;...&lt;/div&gt; is not clickable at point (191, 358). Other element would receive the click: &lt;div data-v-b7819456=&quot;&quot; class=&quot;el-dialog__wrapper&quot; style=&quot;z-index: 2001;&quot;&gt;...&lt;/div&gt;
(Session info: chrome=137.0.7151.41)
Stacktrace:
GetHandleVerifier [0x0x7ff6548a91f5+2853845]
GetHandleVerifier [0x0x7ff654603ac0+79008]
(No symbol) [0x0x7ff6543c9bda]
(No symbol) [0x0x7ff6544280e9]
(No symbol) [0x0x7ff654425a8b]
(No symbol) [0x0x7ff654422ad1]
(No symbol) [0x0x7ff6544219d1]
(No symbol) [0x0x7ff654413004]
(No symbol) [0x0x7ff6544484ba]
(No symbol) [0x0x7ff6544128b6]
(No symbol) [0x0x7ff6544486d0]
(No symbol) [0x0x7ff6544708f5]
(No symbol) [0x0x7ff654448293]
(No symbol) [0x0x7ff654411061]
(No symbol) [0x0x7ff654411df3]
GetHandleVerifier [0x0x7ff6548d410d+3029741]
GetHandleVerifier [0x0x7ff6548ce52d+3006221]
GetHandleVerifier [0x0x7ff6548ed5b2+3133330]
GetHandleVerifier [0x0x7ff65461d98e+185198]
GetHandleVerifier [0x0x7ff654624edf+215231]
GetHandleVerifier [0x0x7ff65460c324+113924]
GetHandleVerifier [0x0x7ff65460c4d9+114361]
GetHandleVerifier [0x0x7ff6545f3208+11240]
BaseThreadInitThunk [0x0x7ffb2264e8d7+23]
RtlUserThreadStart [0x0x7ffb2449c5dc+44]
</div>
</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:33:07</span>
</div>
<div class="folder_body"></div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 15:33:09</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="block">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目议题申报测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目议题申报测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 15:36:24</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 15:38:16</td>
</tr>
<tr>
<td>耗时</td>
<td>112.179 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>3</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>3</td>
</tr>
<tr>
<td>通过</td>
<td>3</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="">0</td>
</tr>
<tr>
<td>阻塞</td>
<td style="">0</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 100% : 3 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 100.0%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
</div>
<div class="suite_setup setup" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:36:24</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">'----------' 浏览器初始化完成 '----------'</div>
<div class="info">输入用户名:admin</div>
<div class="info">输入密码:Ubains@4321</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
</div>
</div>
</div>
<div class="suite_file" id="suite_file cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py">
<div>
<span class="label">进入文件</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py</span>
</div>
<div class="case pass" id="case_00000001">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">议题申报001</span>
<span class="executetime">2025-06-10 15:36:38</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报001">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body/div[@class='el-dialog__wrapper']/div[@aria-label='dialog']/div[@class='el-dialog__body']/div[@class='dialog_content']/div[1]/div[2]/div[1]/div[1]、元素类型: getText、元素值: 、预期结果: admin</div>
<div class="info">获取到的文本信息为:申报人:
admin</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:申报人:
admin</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153639402739.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000002">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">议题申报003</span>
<span class="executetime">2025-06-10 15:36:42</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报003">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-topic-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: 请输入议题名称</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153645836984.png" width="50%">
</div>
<div class="info">获取到的提示信息为:请输入议题名称</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:请输入议题名称</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153647998160.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000003">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">议题申报004</span>
<span class="executetime">2025-06-10 15:36:50</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\议题申报\议题申报.py::TopicDeclaration</span>
<div class="test_steps" id="test_steps 议题申报004">
<span class="label">测试步骤</span>
<div class="info">点击【议题申报】按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-name-input']、元素类型: input、元素值: 议题申报测试003、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-type-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[@x-placement='bottom-start']//li[2]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //textarea[@id='create-topic-remarks-textarea']、元素类型: input、元素值: 测试上会依据、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@placeholder='请选择责任单位']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //span[contains(text(),'测试部门')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='tree-selector-confirm']//span[contains(text(),'确定')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-reporter-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[@x-placement='bottom-start']//span[contains(text(),'陈部门领导')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-proposed-meeting-time-datepicker']、元素类型: input、元素值: 2025-06-25、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-reporting-duration-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //span[contains(text(),'15分钟')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-department-leader-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //li[@class='el-select-dropdown__item']//span[contains(text(),'陈部门领导')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-company-leader-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[@x-placement='bottom-start']//span[contains(text(),'范公司主管领导')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //input[@id='create-topic-commission-leader-select']、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //li[@class='el-select-dropdown__item hover']//span[contains(text(),'陈公司委托领导')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">TimeoutException: Element ('xpath', &quot;//li[@class='el-select-dropdown__item hover']//span[contains(text(),'陈公司委托领导')]&quot;) not found or not clickable within 20 seconds.</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-topic-submit-button']//span[contains(text(),'提交')]、元素类型: click、元素值: 、预期结果: </div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: 提交成功</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153753455878.png" width="50%">
</div>
<div class="info">获取到的提示信息为:提交成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:提交成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610153755613613.png" width="75">
</div>
</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\项目定制\兰州中石化项目25-05-24\议题申报\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\项目定制\兰州中石化项目25-05-24\议题申报\</span>
<span class="executetime">2025-06-10 15:37:57</span>
</div>
<div class="folder_body"></div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 15:38:00</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="none">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目代办事宜测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目代办事宜测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 19:48:02</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 19:49:06</td>
</tr>
<tr>
<td>耗时</td>
<td>64.119 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>5</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>5</td>
</tr>
<tr>
<td>通过</td>
<td>5</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="">0</td>
</tr>
<tr>
<td>阻塞</td>
<td style="">0</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 100% : 5 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 100.0%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
</div>
<div class="suite_setup setup" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
<span class="executetime">2025-06-10 19:48:02</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">'----------' 浏览器初始化完成 '----------'</div>
<div class="info">输入用户名:test@user2</div>
<div class="info">输入密码:Ubains@1357</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
<div class="info">点击【代办事宜】按钮</div>
</div>
</div>
</div>
<div class="suite_file" id="suite_file cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py">
<div>
<span class="label">进入文件</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py</span>
</div>
<div class="case pass" id="case_00000001">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜001</span>
<span class="executetime">2025-06-10 19:48:09</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜001">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //div[@class='content']//div[1]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 自动化、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194816304368.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/button[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194818619813.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194818817806.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000002">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜002</span>
<span class="executetime">2025-06-10 19:48:18</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜002">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //div[@class='content']//div[1]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 自动化、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194821336657.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/button[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194823574591.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194823741103.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000003">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜003</span>
<span class="executetime">2025-06-10 19:48:23</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜003">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194826462447.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'cell')][contains(text(),'陈部门领导')]、元素类型: getText、元素值: 、预期结果: 陈部门领导</div>
<div class="info">获取到的文本信息为:陈部门领导</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:陈部门领导</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194826651822.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000004">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜004</span>
<span class="executetime">2025-06-10 19:48:26</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜004">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194829342155.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-meeting-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194831583610.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: 、元素类型: login、元素值: 、预期结果: </div>
<div class="info">输入用户名:test@user1</div>
<div class="info">输入密码:Ubains@1357</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194838427059.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'cell')][contains(text(),'范公司主管领导')]、元素类型: getText、元素值: 、预期结果: 范公司主管领导</div>
<div class="info">获取到的文本信息为:范公司主管领导</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:范公司主管领导</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194838617856.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000005">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜005</span>
<span class="executetime">2025-06-10 19:48:38</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜005">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194841383828.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-meeting-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194843608797.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'content')]//div[2]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 、预期结果: 自动化</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194845861002.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[2]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194848084560.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610194848271888.png" width="75">
</div>
</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
<span class="executetime">2025-06-10 19:48:48</span>
</div>
<div class="folder_body"></div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 19:48:50</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="none">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>兰州中石化项目代办事宜测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">兰州中石化项目代办事宜测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/06/10 19:57:23</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/06/10 19:58:35</td>
</tr>
<tr>
<td>耗时</td>
<td>71.938 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>5</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>5</td>
</tr>
<tr>
<td>通过</td>
<td>5</td>
</tr>
<tr>
<td>失败</td>
<td style="">0</td>
</tr>
<tr>
<td>异常</td>
<td style="">0</td>
</tr>
<tr>
<td>阻塞</td>
<td style="">0</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 100% : 5 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 100.0%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div>
<span class="label">进入目录</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
</div>
<div class="suite_setup setup" id="suite_setup setup cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
<span class="executetime">2025-06-10 19:57:23</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">'----------' 浏览器初始化完成 '----------'</div>
<div class="info">输入用户名:test@user2</div>
<div class="info">输入密码:Ubains@1357</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
<div class="info">点击【代办事宜】按钮</div>
</div>
</div>
</div>
<div class="suite_file" id="suite_file cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py">
<div>
<span class="label">进入文件</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py</span>
</div>
<div class="case pass" id="case_00000001">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜001</span>
<span class="executetime">2025-06-10 19:57:31</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜001">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //div[@class='content']//div[1]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 自动化、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195739814315.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/button[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195742122302.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195742317923.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000002">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜002</span>
<span class="executetime">2025-06-10 19:57:42</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜002">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //div[@class='content']//div[1]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 自动化、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195744812401.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/button[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195747087141.png" width="75">
</div>
<div class="info">页面: AgencyMatters、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195747270608.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000003">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜003</span>
<span class="executetime">2025-06-10 19:57:47</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜003">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195749967534.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'cell')][contains(text(),'陈部门领导')]、元素类型: getText、元素值: 、预期结果: 陈部门领导</div>
<div class="info">获取到的文本信息为:陈部门领导</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:陈部门领导</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195750148386.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000004">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜004</span>
<span class="executetime">2025-06-10 19:57:50</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜004">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195752851935.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-meeting-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195755079609.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: 审批成功</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195755240409.png" width="50%">
</div>
<div class="info">获取到的提示信息为:审批成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:审批成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195757410119.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: 、元素类型: login、元素值: ['test@user1', 'Ubains@1357']、预期结果: </div>
<div class="info">输入用户名:test@user1</div>
<div class="info">输入密码:Ubains@1357</div>
<div class="info">输入验证码:csba</div>
<div class="info">点击登录按钮</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195804197836.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'cell')][contains(text(),'范公司主管领导')]、元素类型: getText、元素值: 、预期结果: 范公司主管领导</div>
<div class="info">获取到的文本信息为:范公司主管领导</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:范公司主管领导</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195804417002.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000005">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">代办事宜005</span>
<span class="executetime">2025-06-10 19:58:04</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\项目定制\兰州中石化项目25-05-24\代办事宜\代办事宜.py::AgencyMatters</span>
<div class="test_steps" id="test_steps 代办事宜005">
<span class="label">测试步骤</span>
<div class="info">页面: AgencyMatters、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195807186779.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //button[@id='create-meeting-submit-button']、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195809426860.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //p[@class='el-message__content']、元素类型: getTips、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195809623572.png" width="50%">
</div>
<div class="info">获取到的提示信息为:审批成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:审批成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195811795301.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //div[contains(@class,'content')]//div[2]//div[2]//div[1]//div[1]//div[2]//input[1]、元素类型: input、元素值: 、预期结果: 自动化</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195814057312.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: xpath、元素定位值: //body[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[2]/div[2]/div[1]/button[1]/span[1]、元素类型: click、元素值: 、预期结果: </div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195816309826.png" width="75">
</div>
<div class="info">页面: TopicDeclaration、元素定位类型: css selector、元素定位值: body &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(1) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(2) &gt; div:nth-child(1) &gt; div:nth-child(3) &gt; table:nth-child(1) &gt; tbody:nth-child(2) &gt; tr:nth-child(1) &gt; td:nth-child(2) &gt; div:nth-child(1) &gt; span:nth-child(1)、元素类型: getText、元素值: 、预期结果: 自动化</div>
<div class="info">获取到的文本信息为:自动化-议题申报测试005</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:自动化-议题申报测试005</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20250610195816507662.png" width="75">
</div>
</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\项目定制\兰州中石化项目25-05-24\代办事宜\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\项目定制\兰州中石化项目25-05-24\代办事宜\</span>
<span class="executetime">2025-06-10 19:58:16</span>
</div>
<div class="folder_body"></div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-06-10 19:58:18</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="none">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论