Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录
切换导航
U
ubains-module-test
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
1
议题
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
郑晓兵
ubains-module-test
Commits
a0b6354e
提交
a0b6354e
authored
5月 06, 2025
作者:
陈泽健
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
使用ANDROID_UIAUTOMATOR类型进行定位元素还有问题,需要再进行调试。
上级
9e4653ac
显示空白字符变更
内嵌
并排
正在显示
31 个修改的文件
包含
8080 行增加
和
325 行删除
+8080
-325
app_base.cpython-310.pyc
预定配套件/Base/__pycache__/app_base.cpython-310.pyc
+0
-0
app_base.py
预定配套件/Base/app_base.py
+18
-12
README.md
预定配套件/README.md
+2
-0
__st__.cpython-310.pyc
...控门口屏/cases/01门口屏首次安装部署/__pycache__/__st__.cpython-310.pyc
+0
-0
安装部署流程.cpython-310.pyc
...控门口屏/cases/01门口屏首次安装部署/__pycache__/安装部署流程.cpython-310.pyc
+0
-0
__st__.py
预定配套件/中控门口屏/cases/01门口屏首次安装部署/__st__.py
+1
-1
安装部署流程.py
预定配套件/中控门口屏/cases/01门口屏首次安装部署/安装部署流程.py
+3
-2
__st__.cpython-310.pyc
...控门口屏/cases/02门口屏会议显示界面/__pycache__/__st__.cpython-310.pyc
+0
-0
门口屏首页界面功能.cpython-310.pyc
...屏/cases/02门口屏会议显示界面/__pycache__/门口屏首页界面功能.cpython-310.pyc
+0
-0
__st__.py
预定配套件/中控门口屏/cases/02门口屏会议显示界面/__st__.py
+1
-1
门口屏首页界面功能.py
预定配套件/中控门口屏/cases/02门口屏会议显示界面/门口屏首页界面功能.py
+85
-0
report_20250506_183631.html
预定配套件/中控门口屏/log/report_20250506_183631.html
+40
-32
report_20250506_183851.html
预定配套件/中控门口屏/log/report_20250506_183851.html
+40
-32
report_20250506_185048.html
预定配套件/中控门口屏/log/report_20250506_185048.html
+548
-0
report_20250506_185550.html
预定配套件/中控门口屏/log/report_20250506_185550.html
+548
-0
report_20250506_190503.html
预定配套件/中控门口屏/log/report_20250506_190503.html
+516
-0
report_20250506_190757.html
预定配套件/中控门口屏/log/report_20250506_190757.html
+516
-0
report_20250506_190829.html
预定配套件/中控门口屏/log/report_20250506_190829.html
+516
-0
report_20250506_190851.html
预定配套件/中控门口屏/log/report_20250506_190851.html
+548
-0
testresult.log
预定配套件/中控门口屏/log/testresult.log
+142
-79
testresult.log.1
预定配套件/中控门口屏/log/testresult.log.1
+134
-83
testresult.log.2
预定配套件/中控门口屏/log/testresult.log.2
+134
-83
report_20250506_183631.html
预定配套件/中控门口屏/reports/report_20250506_183631.html
+548
-0
report_20250506_183851.html
预定配套件/中控门口屏/reports/report_20250506_183851.html
+548
-0
report_20250506_185048.html
预定配套件/中控门口屏/reports/report_20250506_185048.html
+548
-0
report_20250506_185550.html
预定配套件/中控门口屏/reports/report_20250506_185550.html
+548
-0
report_20250506_190503.html
预定配套件/中控门口屏/reports/report_20250506_190503.html
+516
-0
report_20250506_190757.html
预定配套件/中控门口屏/reports/report_20250506_190757.html
+516
-0
report_20250506_190829.html
预定配套件/中控门口屏/reports/report_20250506_190829.html
+516
-0
report_20250506_190851.html
预定配套件/中控门口屏/reports/report_20250506_190851.html
+548
-0
门口屏5.0测试用例.xlsx
预定配套件/测试数据/门口屏5.0测试用例.xlsx
+0
-0
没有找到文件。
预定配套件/Base/__pycache__/app_base.cpython-310.pyc
浏览文件 @
a0b6354e
No preview for this file type
预定配套件/Base/app_base.py
浏览文件 @
a0b6354e
...
@@ -912,25 +912,31 @@ def click_with_retry(element, max_retries=3, retry_delay=5):
...
@@ -912,25 +912,31 @@ def click_with_retry(element, max_retries=3, retry_delay=5):
# 枚举类型转换函数
# 枚举类型转换函数
def
app_get_by_enum
(
type_str
):
def
app_get_by_enum
(
type_str
):
"""
"""
将字符串类型的定位器类型转换为
selenium.webdriver.common.AppiumBy.
By 枚举类型。
将字符串类型的定位器类型转换为
Appium
By 枚举类型。
参数:
参数:
type_str (str): 定位器类型字符串,例如 'XPATH'。
type_str (str): 定位器类型字符串,例如 'XPATH'
, 'ACCESSIBILITY_ID'
。
返回:
返回:
selenium.webdriver.common.by.By: 对应的 By 枚举类型。
appium.webdriver.common.appiumby.AppiumBy: 对应的 AppiumBy 枚举类型。
异常:
ValueError: 如果传入了不支持的定位类型。
"""
"""
# 将输入的定位器类型字符串转换为大写,以匹配 By 枚举类型的命名
type_str
=
type_str
.
upper
()
type_str
=
type_str
.
upper
()
# 根据输入的字符串类型返回对应的 By 枚举类型
mapping
=
{
if
type_str
==
'XPATH'
:
"ACCESSIBILITY_ID"
:
AppiumBy
.
ACCESSIBILITY_ID
,
return
AppiumBy
.
XPATH
"ID"
:
AppiumBy
.
ID
,
elif
type_str
==
'ID'
:
"XPATH"
:
AppiumBy
.
XPATH
,
return
AppiumBy
.
ID
"ANDROID_UIAUTOMATOR"
:
AppiumBy
.
ANDROID_UIAUTOMATOR
,
else
:
# 可继续添加其他支持的定位方式
# 如果输入的定位器类型字符串不匹配任何已知的 By 枚举类型,抛出 ValueError 异常
}
raise
ValueError
(
f
"未知的定位器类型: {type_str}"
)
if
type_str
not
in
mapping
:
raise
ValueError
(
f
"不支持的定位类型: {type_str}"
)
return
mapping
[
type_str
]
# app输入框事件函数
# app输入框事件函数
def
input_text_with_retry
(
app_driver
,
by
,
value
,
text
,
max_retries
=
3
,
retry_delay
=
5
):
def
input_text_with_retry
(
app_driver
,
by
,
value
,
text
,
max_retries
=
3
,
retry_delay
=
5
):
...
...
预定配套件/README.md
浏览文件 @
a0b6354e
...
@@ -3,3 +3,4 @@
...
@@ -3,3 +3,4 @@
2.
2025-05-06
2.
2025-05-06
-
补充app_base中app_get_by_enum、input_text_with_retry、click_element_with_retry、get_text_with_retry函数用以自动化测试调用。
-
补充app_base中app_get_by_enum、input_text_with_retry、click_element_with_retry、get_text_with_retry函数用以自动化测试调用。
-
增加门口屏首次安装部署的自动化测试流程及JSON数据。
-
增加门口屏首次安装部署的自动化测试流程及JSON数据。
-
使用ANDROID_UIAUTOMATOR类型进行定位元素还有问题,需要再进行调试。
\ No newline at end of file
预定配套件/中控门口屏/cases/01门口屏首次安装部署/__pycache__/__st__.cpython-310.pyc
浏览文件 @
a0b6354e
No preview for this file type
预定配套件/中控门口屏/cases/01门口屏首次安装部署/__pycache__/安装部署流程.cpython-310.pyc
浏览文件 @
a0b6354e
No preview for this file type
预定配套件/中控门口屏/cases/01门口屏首次安装部署/__st__.py
浏览文件 @
a0b6354e
...
@@ -20,7 +20,7 @@ except ModuleNotFoundError as e:
...
@@ -20,7 +20,7 @@ except ModuleNotFoundError as e:
def
suite_setup
():
def
suite_setup
():
STEP
(
1
,
"初始化设备1的adb连接"
)
STEP
(
1
,
"初始化设备1的adb连接"
)
device_ip1
=
'192.168.1.1
28
'
device_ip1
=
'192.168.1.1
57
'
CHECK_POINT
(
"设备1的adb连接初始化检测"
,
app_init
(
device_ip1
)
==
True
)
CHECK_POINT
(
"设备1的adb连接初始化检测"
,
app_init
(
device_ip1
)
==
True
)
browser_init
(
"展厅预定巡检"
)
browser_init
(
"展厅预定巡检"
)
...
...
预定配套件/中控门口屏/cases/01门口屏首次安装部署/安装部署流程.py
浏览文件 @
a0b6354e
...
@@ -41,8 +41,8 @@ class DoorScreenDeployment:
...
@@ -41,8 +41,8 @@ class DoorScreenDeployment:
# 初始化应用驱动,连接到指定的设备和应用
# 初始化应用驱动,连接到指定的设备和应用
app_drive
=
app_setup_driver
(
"Android"
,
"11"
,
"DoorScreen"
,
"com.ubains.local.gviewer"
,
app_drive
=
app_setup_driver
(
"Android"
,
"11"
,
"DoorScreen"
,
"com.ubains.local.gviewer"
,
"com.ubains.ub.gview.SplashActivity"
,
"192.168.1.1
28
:5555"
)
"com.ubains.ub.gview.SplashActivity"
,
"192.168.1.1
57
:5555"
)
app_drive
.
implicitly_wait
(
6
0
)
# 设置缺省等待时间
sleep
(
5
0
)
# 设置缺省等待时间
# 使用显式等待来等待元素出现
# 使用显式等待来等待元素出现
logging
.
info
(
"等待首页加载..."
)
logging
.
info
(
"等待首页加载..."
)
...
@@ -63,6 +63,7 @@ class DoorScreenDeployment:
...
@@ -63,6 +63,7 @@ class DoorScreenDeployment:
# 赋值灯带时间
# 赋值灯带时间
sleep_time
=
step
.
get
(
'sleep_time'
)
sleep_time
=
step
.
get
(
'sleep_time'
)
# 判断页面功能类型
# 判断页面功能类型
if
page_type
==
"Deployment"
:
if
page_type
==
"Deployment"
:
...
...
预定配套件/中控门口屏/cases/02门口屏会议显示界面/__pycache__/__st__.cpython-310.pyc
0 → 100644
浏览文件 @
a0b6354e
File added
预定配套件/中控门口屏/cases/02门口屏会议显示界面/__pycache__/门口屏首页界面功能.cpython-310.pyc
0 → 100644
浏览文件 @
a0b6354e
File added
预定配套件/中控门口屏/cases/02门口屏会议显示界面/__st__.py
浏览文件 @
a0b6354e
...
@@ -20,7 +20,7 @@ except ModuleNotFoundError as e:
...
@@ -20,7 +20,7 @@ except ModuleNotFoundError as e:
def
suite_setup
():
def
suite_setup
():
STEP
(
1
,
"初始化设备1的adb连接"
)
STEP
(
1
,
"初始化设备1的adb连接"
)
device_ip1
=
'192.168.1.1
28
'
device_ip1
=
'192.168.1.1
57
'
CHECK_POINT
(
"设备1的adb连接初始化检测"
,
app_init
(
device_ip1
)
==
True
)
CHECK_POINT
(
"设备1的adb连接初始化检测"
,
app_init
(
device_ip1
)
==
True
)
browser_init
(
"展厅预定巡检"
)
browser_init
(
"展厅预定巡检"
)
...
...
预定配套件/中控门口屏/cases/02门口屏会议显示界面/门口屏首页界面功能.py
0 → 100644
浏览文件 @
a0b6354e
import
sys
import
os
from
预定配套件
.
Base
.
app_base
import
find_element_with_retry
# 获取当前脚本的绝对路径
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
*
from
预定配套件
.
Base
.
app_base
import
*
# 获取当前脚本所在的目录
current_dir
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
__file__
))
# 构建XLSX文件的绝对路径
xlsx_file_path
=
os
.
path
.
join
(
current_dir
,
'..'
,
'..'
,
'..'
,
'测试数据'
,
'门口屏5.0测试用例.xlsx'
)
class
DoorScreenDeployment
:
tags
=
[
'门口屏首页功能'
]
"""
执行指令是:
1.cd .
\
预定配套件
\
中控门口屏
\
2.hytest --report_title 门口屏首页功能测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 门口屏首页功能
"""
ddt_cases
=
read_xlsx_data
(
xlsx_file_path
,
sheet_name
=
'第二主界面'
,
case_type
=
"标准版"
)
# 测试开始前调用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
sleep
(
1
)
# 初始化应用驱动,连接到指定的设备和应用
app_drive
=
app_setup_driver
(
"Android"
,
"11"
,
"DoorScreen"
,
"com.ubains.local.gviewer"
,
"com.ubains.ub.gview.SplashActivity"
,
"192.168.1.128:5555"
)
app_drive
.
implicitly_wait
(
60
)
# 设置缺省等待时间
# 使用显式等待来等待元素出现
logging
.
info
(
"等待首页加载..."
)
for
step
in
self
.
para
:
# 赋值页面类型page
page_type
=
step
.
get
(
'page'
)
# 赋值元素定位类型,并将字符串转为Enum类型
locator_type
=
app_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'
)
# 判断页面功能类型
if
page_type
==
"Deployment"
:
if
element_type
==
"input"
:
INFO
(
f
"输入框输入定位类型:{element_type}"
)
# 调用app输入函数
input_text_with_retry
(
app_drive
,
locator_type
,
locator_value
,
element_value
)
sleep
(
sleep_time
)
elif
element_type
==
"click"
:
# 调用app点击函数
click_element_with_retry
(
app_drive
,
locator_type
,
locator_value
)
sleep
(
sleep_time
)
elif
element_type
==
"getText"
:
# 调用app获取文本函数
element_text
=
get_text_with_retry
(
app_drive
,
locator_type
,
locator_value
)
INFO
(
f
"APP获取到的文本信息:{element_text}"
)
sleep
(
sleep_time
)
\ No newline at end of file
预定配套件/中控门口屏/log/report_20250
414_18144
1.html
→
预定配套件/中控门口屏/log/report_20250
506_18363
1.html
浏览文件 @
a0b6354e
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<html>
<head>
<head>
<title>
测试报告
</title>
<title>
门口屏首次部署
测试报告
</title>
<meta
charset=
"UTF-8"
>
<meta
charset=
"UTF-8"
>
<style>body
{
<style>body
{
font-family
:
consolas
,
Verdana
,
sans-serif
;
font-family
:
consolas
,
Verdana
,
sans-serif
;
...
@@ -372,7 +372,7 @@ function next_error(){
...
@@ -372,7 +372,7 @@ function next_error(){
</div>
</div>
</div>
</div>
<div
class=
"main_section"
>
<div
class=
"main_section"
>
<h1
style=
"font-family: auto"
>
测试报告
</h1>
<h1
style=
"font-family: auto"
>
门口屏首次部署
测试报告
</h1>
<h3>
统计结果
</h3>
<h3>
统计结果
</h3>
<div
class=
"result"
>
<div
class=
"result"
>
<table
class=
"result_table"
>
<table
class=
"result_table"
>
...
@@ -383,15 +383,15 @@ function next_error(){
...
@@ -383,15 +383,15 @@ function next_error(){
</tr>
</tr>
<tr>
<tr>
<td>
开始时间
</td>
<td>
开始时间
</td>
<td>
2025/0
4/14 18:14:4
1
</td>
<td>
2025/0
5/06 18:36:3
1
</td>
</tr>
</tr>
<tr>
<tr>
<td>
结束时间
</td>
<td>
结束时间
</td>
<td>
2025/0
4/14 18:14:48
</td>
<td>
2025/0
5/06 18:37:27
</td>
</tr>
</tr>
<tr>
<tr>
<td>
耗时
</td>
<td>
耗时
</td>
<td>
6.849
秒
</td>
<td>
56.244
秒
</td>
</tr>
</tr>
<tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
预备执行用例数量
</td>
...
@@ -403,7 +403,7 @@ function next_error(){
...
@@ -403,7 +403,7 @@ function next_error(){
</tr>
</tr>
<tr>
<tr>
<td>
通过
</td>
<td>
通过
</td>
<td>
1
</td>
<td>
0
</td>
</tr>
</tr>
<tr>
<tr>
<td>
失败
</td>
<td>
失败
</td>
...
@@ -411,7 +411,7 @@ function next_error(){
...
@@ -411,7 +411,7 @@ function next_error(){
</tr>
</tr>
<tr>
<tr>
<td>
异常
</td>
<td>
异常
</td>
<td
style=
"
"
>
0
</td>
<td
style=
"
color:red"
>
1
</td>
</tr>
</tr>
<tr>
<tr>
<td>
阻塞
</td>
<td>
阻塞
</td>
...
@@ -437,9 +437,9 @@ function next_error(){
...
@@ -437,9 +437,9 @@ function next_error(){
</table>
</table>
<div
class=
"result_barchart"
>
<div
class=
"result_barchart"
>
<div
class=
"barchar_item"
>
<div
class=
"barchar_item"
>
<span>
用例通过
100% : 1
个
</span>
<span>
用例通过
0% : 0
个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width:
10
0.0%; background-color: #04AA6D;"
></div>
<div
class=
"barchart_bar"
style=
"width: 0.0%; background-color: #04AA6D;"
></div>
</div>
</div>
</div>
</div>
<div
class=
"barchar_item"
>
<div
class=
"barchar_item"
>
...
@@ -449,9 +449,9 @@ function next_error(){
...
@@ -449,9 +449,9 @@ function next_error(){
</div>
</div>
</div>
</div>
<div
class=
"barchar_item"
>
<div
class=
"barchar_item"
>
<span>
用例异常
0% : 0
个
</span>
<span>
用例异常
100% : 1
个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 0.0%; background-color: #9c27b0;"
></div>
<div
class=
"barchart_bar"
style=
"width:
10
0.0%; background-color: #9c27b0;"
></div>
</div>
</div>
</div>
</div>
<div
class=
"barchar_item"
>
<div
class=
"barchar_item"
>
...
@@ -466,25 +466,25 @@ function next_error(){
...
@@ -466,25 +466,25 @@ function next_error(){
<h3
style=
"display:inline"
>
执行日志
</h3>
<h3
style=
"display:inline"
>
执行日志
</h3>
</div>
</div>
<div
class=
"exec_log"
>
<div
class=
"exec_log"
>
<div
class=
"suite_dir"
id=
"suite_dir cases\
测试目录
\"
>
<div
class=
"suite_dir"
id=
"suite_dir cases\
01门口屏首次安装部署
\"
>
<div>
<div>
<span
class=
"label"
>
进入目录
</span>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\
测试目录
\
</span>
<span>
cases\
01门口屏首次安装部署
\
</span>
</div>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\
测试目录
\"
>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\
01门口屏首次安装部署
\"
>
<div
class=
"folder_header"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\
测试目录
\
</span>
<span>
cases\
01门口屏首次安装部署
\
</span>
<span
class=
"executetime"
>
2025-0
4-14 18:14:4
1
</span>
<span
class=
"executetime"
>
2025-0
5-06 18:36:3
1
</span>
</div>
</div>
<div
class=
"folder_body"
>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备adb连接
</span>
<span>
初始化设备
1的
adb连接
</span>
</div>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.
5.112
:5555
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.
1.128
:5555
</div>
<div
class=
"info"
>
设备 192.168.
5.112
:5555 已连接并可用
</div>
<div
class=
"info"
>
设备 192.168.
1.128
:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
<span>
设备1的adb连接初始化检测
</span>
...
@@ -494,32 +494,40 @@ function next_error(){
...
@@ -494,32 +494,40 @@ function next_error(){
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\
测试目录\门口屏测试
.py"
>
<div
class=
"suite_file"
id=
"suite_file cases\
01门口屏首次安装部署\安装部署流程
.py"
>
<div>
<div>
<span
class=
"label"
>
进入文件
</span>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\
测试目录\门口屏测试
.py
</span>
<span>
cases\
01门口屏首次安装部署\安装部署流程
.py
</span>
</div>
</div>
<div
class=
"case
pass
"
id=
"case_00000001"
>
<div
class=
"case
abort
"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例
PASS
</span>
<span
class=
"label caselabel"
>
用例
ABORT
</span>
<span
class=
"casename"
>
DoorScreen
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-0
4-14 18:14:4
3
</span>
<span
class=
"executetime"
>
2025-0
5-06 18:36:3
3
</span>
</div>
</div>
<div
class=
"folder_body"
>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\
测试目录\门口屏测试.py::DoorScreen
</span>
<span
class=
"case_class_path"
>
cases\
01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps
DoorScreen
"
>
<div
class=
"test_steps"
id=
"test_steps
首次安装部署功能
"
>
<span
class=
"label"
>
测试步骤
</span>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: accessibility id=b88be59fe83911ee85f904ed33f5b46d
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 71, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 968, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: accessibility id=b88be59fe83911ee85f904ed33f5b46d
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\
测试目录
\"
>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\
01门口屏首次安装部署
\"
>
<div
class=
"folder_header"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\
测试目录
\
</span>
<span>
cases\
01门口屏首次安装部署
\
</span>
<span
class=
"executetime"
>
2025-0
4-14 18:14:4
5
</span>
<span
class=
"executetime"
>
2025-0
5-06 18:37:2
5
</span>
</div>
</div>
<div
class=
"folder_body"
>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.1
12
:5555
</div>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.1
56
:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
...
@@ -530,7 +538,7 @@ function next_error(){
...
@@ -530,7 +538,7 @@ function next_error(){
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</div>
<div
class=
"menu-item"
id=
"display_mode"
onclick=
"toggle_folder_all_cases()"
>
Summary
</div>
<div
class=
"menu-item"
id=
"display_mode"
onclick=
"toggle_folder_all_cases()"
>
Summary
</div>
<div
class=
"error_jumper"
display=
"
none
"
>
<div
class=
"error_jumper"
display=
"
block
"
>
<div
class=
"menu-item"
onclick=
"previous_error()"
title=
"上一个错误"
>
∧
</div>
<div
class=
"menu-item"
onclick=
"previous_error()"
title=
"上一个错误"
>
∧
</div>
<div
class=
"menu-item"
onclick=
"next_error()"
title=
"下一个错误"
>
∨
</div>
<div
class=
"menu-item"
onclick=
"next_error()"
title=
"下一个错误"
>
∨
</div>
</div>
</div>
...
...
预定配套件/中控门口屏/log/report_20250
414_181513
.html
→
预定配套件/中控门口屏/log/report_20250
506_183851
.html
浏览文件 @
a0b6354e
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<html>
<head>
<head>
<title>
测试报告
</title>
<title>
门口屏首次部署
测试报告
</title>
<meta
charset=
"UTF-8"
>
<meta
charset=
"UTF-8"
>
<style>body
{
<style>body
{
font-family
:
consolas
,
Verdana
,
sans-serif
;
font-family
:
consolas
,
Verdana
,
sans-serif
;
...
@@ -372,7 +372,7 @@ function next_error(){
...
@@ -372,7 +372,7 @@ function next_error(){
</div>
</div>
</div>
</div>
<div
class=
"main_section"
>
<div
class=
"main_section"
>
<h1
style=
"font-family: auto"
>
测试报告
</h1>
<h1
style=
"font-family: auto"
>
门口屏首次部署
测试报告
</h1>
<h3>
统计结果
</h3>
<h3>
统计结果
</h3>
<div
class=
"result"
>
<div
class=
"result"
>
<table
class=
"result_table"
>
<table
class=
"result_table"
>
...
@@ -383,15 +383,15 @@ function next_error(){
...
@@ -383,15 +383,15 @@ function next_error(){
</tr>
</tr>
<tr>
<tr>
<td>
开始时间
</td>
<td>
开始时间
</td>
<td>
2025/0
4/14 18:15:13
</td>
<td>
2025/0
5/06 18:38:51
</td>
</tr>
</tr>
<tr>
<tr>
<td>
结束时间
</td>
<td>
结束时间
</td>
<td>
2025/0
4/14 18:15:21
</td>
<td>
2025/0
5/06 18:39:46
</td>
</tr>
</tr>
<tr>
<tr>
<td>
耗时
</td>
<td>
耗时
</td>
<td>
7.75
8 秒
</td>
<td>
55.76
8 秒
</td>
</tr>
</tr>
<tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
预备执行用例数量
</td>
...
@@ -403,7 +403,7 @@ function next_error(){
...
@@ -403,7 +403,7 @@ function next_error(){
</tr>
</tr>
<tr>
<tr>
<td>
通过
</td>
<td>
通过
</td>
<td>
1
</td>
<td>
0
</td>
</tr>
</tr>
<tr>
<tr>
<td>
失败
</td>
<td>
失败
</td>
...
@@ -411,7 +411,7 @@ function next_error(){
...
@@ -411,7 +411,7 @@ function next_error(){
</tr>
</tr>
<tr>
<tr>
<td>
异常
</td>
<td>
异常
</td>
<td
style=
"
"
>
0
</td>
<td
style=
"
color:red"
>
1
</td>
</tr>
</tr>
<tr>
<tr>
<td>
阻塞
</td>
<td>
阻塞
</td>
...
@@ -437,9 +437,9 @@ function next_error(){
...
@@ -437,9 +437,9 @@ function next_error(){
</table>
</table>
<div
class=
"result_barchart"
>
<div
class=
"result_barchart"
>
<div
class=
"barchar_item"
>
<div
class=
"barchar_item"
>
<span>
用例通过
100% : 1
个
</span>
<span>
用例通过
0% : 0
个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width:
10
0.0%; background-color: #04AA6D;"
></div>
<div
class=
"barchart_bar"
style=
"width: 0.0%; background-color: #04AA6D;"
></div>
</div>
</div>
</div>
</div>
<div
class=
"barchar_item"
>
<div
class=
"barchar_item"
>
...
@@ -449,9 +449,9 @@ function next_error(){
...
@@ -449,9 +449,9 @@ function next_error(){
</div>
</div>
</div>
</div>
<div
class=
"barchar_item"
>
<div
class=
"barchar_item"
>
<span>
用例异常
0% : 0
个
</span>
<span>
用例异常
100% : 1
个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 0.0%; background-color: #9c27b0;"
></div>
<div
class=
"barchart_bar"
style=
"width:
10
0.0%; background-color: #9c27b0;"
></div>
</div>
</div>
</div>
</div>
<div
class=
"barchar_item"
>
<div
class=
"barchar_item"
>
...
@@ -466,25 +466,25 @@ function next_error(){
...
@@ -466,25 +466,25 @@ function next_error(){
<h3
style=
"display:inline"
>
执行日志
</h3>
<h3
style=
"display:inline"
>
执行日志
</h3>
</div>
</div>
<div
class=
"exec_log"
>
<div
class=
"exec_log"
>
<div
class=
"suite_dir"
id=
"suite_dir cases\
测试目录
\"
>
<div
class=
"suite_dir"
id=
"suite_dir cases\
01门口屏首次安装部署
\"
>
<div>
<div>
<span
class=
"label"
>
进入目录
</span>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\
测试目录
\
</span>
<span>
cases\
01门口屏首次安装部署
\
</span>
</div>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\
测试目录
\"
>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\
01门口屏首次安装部署
\"
>
<div
class=
"folder_header"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\
测试目录
\
</span>
<span>
cases\
01门口屏首次安装部署
\
</span>
<span
class=
"executetime"
>
2025-0
4-14 18:15:13
</span>
<span
class=
"executetime"
>
2025-0
5-06 18:38:51
</span>
</div>
</div>
<div
class=
"folder_body"
>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备adb连接
</span>
<span>
初始化设备
1的
adb连接
</span>
</div>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.1
60
:5555
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.1
28
:5555
</div>
<div
class=
"info"
>
设备 192.168.1.1
60
:5555 已连接并可用
</div>
<div
class=
"info"
>
设备 192.168.1.1
28
:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
<span>
设备1的adb连接初始化检测
</span>
...
@@ -494,32 +494,40 @@ function next_error(){
...
@@ -494,32 +494,40 @@ function next_error(){
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\
测试目录\门口屏测试
.py"
>
<div
class=
"suite_file"
id=
"suite_file cases\
01门口屏首次安装部署\安装部署流程
.py"
>
<div>
<div>
<span
class=
"label"
>
进入文件
</span>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\
测试目录\门口屏测试
.py
</span>
<span>
cases\
01门口屏首次安装部署\安装部署流程
.py
</span>
</div>
</div>
<div
class=
"case
pass
"
id=
"case_00000001"
>
<div
class=
"case
abort
"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例
PASS
</span>
<span
class=
"label caselabel"
>
用例
ABORT
</span>
<span
class=
"casename"
>
DoorScreen
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-0
4-14 18:15:15
</span>
<span
class=
"executetime"
>
2025-0
5-06 18:38:52
</span>
</div>
</div>
<div
class=
"folder_body"
>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\
测试目录\门口屏测试.py::DoorScreen
</span>
<span
class=
"case_class_path"
>
cases\
01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps
DoorScreen
"
>
<div
class=
"test_steps"
id=
"test_steps
首次安装部署功能
"
>
<span
class=
"label"
>
测试步骤
</span>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: accessibility id=b88be59fe83911ee85f904ed33f5b46d
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 71, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 968, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: accessibility id=b88be59fe83911ee85f904ed33f5b46d
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\
测试目录
\"
>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\
01门口屏首次安装部署
\"
>
<div
class=
"folder_header"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\
测试目录
\
</span>
<span>
cases\
01门口屏首次安装部署
\
</span>
<span
class=
"executetime"
>
2025-0
4-14 18:15:17
</span>
<span
class=
"executetime"
>
2025-0
5-06 18:39:44
</span>
</div>
</div>
<div
class=
"folder_body"
>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.
1.160
:5555
</div>
<div
class=
"info"
>
ADB 连接已断开: 192.168.
5.156
:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
...
@@ -530,7 +538,7 @@ function next_error(){
...
@@ -530,7 +538,7 @@ function next_error(){
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</div>
<div
class=
"menu-item"
id=
"display_mode"
onclick=
"toggle_folder_all_cases()"
>
Summary
</div>
<div
class=
"menu-item"
id=
"display_mode"
onclick=
"toggle_folder_all_cases()"
>
Summary
</div>
<div
class=
"error_jumper"
display=
"
none
"
>
<div
class=
"error_jumper"
display=
"
block
"
>
<div
class=
"menu-item"
onclick=
"previous_error()"
title=
"上一个错误"
>
∧
</div>
<div
class=
"menu-item"
onclick=
"previous_error()"
title=
"上一个错误"
>
∧
</div>
<div
class=
"menu-item"
onclick=
"next_error()"
title=
"下一个错误"
>
∨
</div>
<div
class=
"menu-item"
onclick=
"next_error()"
title=
"下一个错误"
>
∨
</div>
</div>
</div>
...
...
预定配套件/中控门口屏/log/report_20250506_185048.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 18:50:48
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 18:51:26
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
37.837 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
实际执用例行数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
通过
</td>
<td>
0
</td>
</tr>
<tr>
<td>
失败
</td>
<td
style=
""
>
0
</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>
<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>
用例通过 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>
用例异常 100% : 1 个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 100.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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:50:48
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化浏览器 '----------'
</div>
<div
class=
"info"
>
'----------' 浏览器初始化完成 '----------'
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\01门口屏首次安装部署\安装部署流程.py"
>
<div>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\01门口屏首次安装部署\安装部署流程.py
</span>
</div>
<div
class=
"case abort"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例 ABORT
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-05-06 18:50:50
</span>
</div>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps 首次安装部署功能"
>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: -android uiautomator=b88be59fe83911ee85f904ed33f5b46d
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 72, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 972, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: -android uiautomator=b88be59fe83911ee85f904ed33f5b46d
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:51:24
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.156:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/log/report_20250506_185550.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 18:55:50
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 18:57:19
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
88.871 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
实际执用例行数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
通过
</td>
<td>
0
</td>
</tr>
<tr>
<td>
失败
</td>
<td
style=
""
>
0
</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>
<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>
用例通过 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>
用例异常 100% : 1 个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 100.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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:55:50
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化浏览器 '----------'
</div>
<div
class=
"info"
>
'----------' 浏览器初始化完成 '----------'
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\01门口屏首次安装部署\安装部署流程.py"
>
<div>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\01门口屏首次安装部署\安装部署流程.py
</span>
</div>
<div
class=
"case abort"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例 ABORT
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-05-06 18:55:52
</span>
</div>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps 首次安装部署功能"
>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: -android uiautomator='new UiSelector().description('b88be59fe83911ee85f904ed33f5b46d')'
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 72, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 972, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: -android uiautomator='new UiSelector().description('b88be59fe83911ee85f904ed33f5b46d')'
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:57:17
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.156:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/log/report_20250506_190503.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 19:05:03
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 19:05:06
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
2.714 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</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"
>
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>
<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% : 1 个
</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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup fail"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:05:03
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 未找到,请检查设备IP是否正确!
</div>
<div
class=
"checkpoint_fail"
>
<span
class=
"tag"
>
检查点 FAIL
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info error-info"
>
suite setup fail | 'NoneType' object has no attribute 'execRet'
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\__st__.py
"
, line 24, in suite_setup
CHECK_POINT(
"
设备1的adb连接初始化检测
"
, app_init(device_ip1) == True)
File
"
C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py
"
, line 71, in CHECK_POINT
Runner.curRunningCase.execRet='fail'
AttributeError: 'NoneType' object has no attribute 'execRet'
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/log/report_20250506_190757.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 19:07:57
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 19:08:00
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
2.713 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</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"
>
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>
<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% : 1 个
</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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup fail"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:07:57
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 未找到,请检查设备IP是否正确!
</div>
<div
class=
"checkpoint_fail"
>
<span
class=
"tag"
>
检查点 FAIL
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info error-info"
>
suite setup fail | 'NoneType' object has no attribute 'execRet'
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\__st__.py
"
, line 24, in suite_setup
CHECK_POINT(
"
设备1的adb连接初始化检测
"
, app_init(device_ip1) == True)
File
"
C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py
"
, line 71, in CHECK_POINT
Runner.curRunningCase.execRet='fail'
AttributeError: 'NoneType' object has no attribute 'execRet'
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/log/report_20250506_190829.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 19:08:29
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 19:08:31
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
2.744 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</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"
>
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>
<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% : 1 个
</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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup fail"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:08:29
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 未找到,请检查设备IP是否正确!
</div>
<div
class=
"checkpoint_fail"
>
<span
class=
"tag"
>
检查点 FAIL
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info error-info"
>
suite setup fail | 'NoneType' object has no attribute 'execRet'
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\__st__.py
"
, line 24, in suite_setup
CHECK_POINT(
"
设备1的adb连接初始化检测
"
, app_init(device_ip1) == True)
File
"
C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py
"
, line 71, in CHECK_POINT
Runner.curRunningCase.execRet='fail'
AttributeError: 'NoneType' object has no attribute 'execRet'
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/log/report_20250506_190851.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 19:08:51
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 19:10:21
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
90.005 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
实际执用例行数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
通过
</td>
<td>
0
</td>
</tr>
<tr>
<td>
失败
</td>
<td
style=
""
>
0
</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>
<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>
用例通过 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>
用例异常 100% : 1 个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 100.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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:08:51
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.157:5555
</div>
<div
class=
"info"
>
设备 192.168.1.157:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化浏览器 '----------'
</div>
<div
class=
"info"
>
'----------' 浏览器初始化完成 '----------'
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\01门口屏首次安装部署\安装部署流程.py"
>
<div>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\01门口屏首次安装部署\安装部署流程.py
</span>
</div>
<div
class=
"case abort"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例 ABORT
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-05-06 19:08:53
</span>
</div>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps 首次安装部署功能"
>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: -android uiautomator=new UiSelector().description(
"
b88be59fe83911ee85f904ed33f5b46d
"
)
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 72, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 972, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: -android uiautomator=new UiSelector().description(
"
b88be59fe83911ee85f904ed33f5b46d
"
)
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:10:19
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.156:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/log/testresult.log
浏览文件 @
a0b6354e
...
@@ -12,89 +12,116 @@
...
@@ -12,89 +12,116 @@
"name": "首次安装部署功能",
"name": "首次安装部署功能",
"para": [{
"para": [{
"page": "Deployment",
"page": "Deployment",
"locator_type": "
XPATH
",
"locator_type": "
ANDROID_UIAUTOMATOR
",
"locator_value": "
/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText
",
"locator_value": "
new UiSelector().description(\"b88be59fe83911ee85f904ed33f5b46d\")
",
"element_type": "input",
"element_type": "input",
"element_value": "192.168.5.235",
"element_value": "192.168.5.235",
"expented_result": "",
"expented_result": "",
"sleep_time":2
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[2]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time": 10
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText",
"element_type": "input",
"element_value": "测试会议室",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[1]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.TextView",
"element_type": "getText",
"element_value": "",
"expented_result": "测试会议室",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[3]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]/android.widget.Button[2]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":10
}
}
]
]
}
}
XLSX文件已读取
XLSX文件已读取
== cases\02门口屏会议显示界面\__st__.py
== cases\02门口屏会议显示界面\门口屏首页界面功能.py
行 4 的 JSON 数据: None
行 5 的 JSON 数据: None
行 6 的 JSON 数据: None
行 7 的 JSON 数据: None
行 8 的 JSON 数据: None
行 9 的 JSON 数据: None
行 10 的 JSON 数据: None
行 11 的 JSON 数据: None
行 12 的 JSON 数据: None
行 13 的 JSON 数据: None
行 14 的 JSON 数据: None
行 15 的 JSON 数据: None
行 16 的 JSON 数据: None
行 17 的 JSON 数据: None
行 18 的 JSON 数据: None
行 19 的 JSON 数据: None
行 20 的 JSON 数据: None
行 21 的 JSON 数据: None
行 22 的 JSON 数据: None
行 23 的 JSON 数据: None
行 24 的 JSON 数据: None
行 25 的 JSON 数据: None
行 26 的 JSON 数据: None
行 27 的 JSON 数据: None
行 28 的 JSON 数据: None
行 29 的 JSON 数据: None
行 30 的 JSON 数据: None
行 31 的 JSON 数据: None
行 32 的 JSON 数据: None
行 33 的 JSON 数据: None
行 34 的 JSON 数据: None
行 35 的 JSON 数据: None
行 36 的 JSON 数据: None
行 37 的 JSON 数据: None
行 38 的 JSON 数据: None
行 39 的 JSON 数据: None
行 40 的 JSON 数据: None
行 41 的 JSON 数据: None
行 42 的 JSON 数据: None
行 43 的 JSON 数据: None
行 44 的 JSON 数据: None
行 45 的 JSON 数据: None
行 46 的 JSON 数据: None
行 47 的 JSON 数据: None
行 48 的 JSON 数据: None
行 49 的 JSON 数据: None
行 50 的 JSON 数据: None
行 51 的 JSON 数据: None
行 52 的 JSON 数据: None
行 53 的 JSON 数据: None
行 54 的 JSON 数据: None
行 55 的 JSON 数据: None
行 56 的 JSON 数据: None
行 57 的 JSON 数据: None
行 58 的 JSON 数据: None
行 59 的 JSON 数据: None
行 60 的 JSON 数据: None
行 61 的 JSON 数据: None
行 62 的 JSON 数据: None
行 63 的 JSON 数据: None
行 64 的 JSON 数据: None
行 65 的 JSON 数据: None
行 66 的 JSON 数据: None
行 67 的 JSON 数据: None
行 68 的 JSON 数据: None
行 69 的 JSON 数据: None
行 70 的 JSON 数据: None
行 71 的 JSON 数据: None
行 72 的 JSON 数据: None
行 73 的 JSON 数据: None
行 74 的 JSON 数据: None
行 75 的 JSON 数据: None
行 76 的 JSON 数据: None
行 77 的 JSON 数据: None
行 78 的 JSON 数据: None
行 79 的 JSON 数据: None
行 80 的 JSON 数据: None
行 81 的 JSON 数据: None
行 82 的 JSON 数据: None
行 83 的 JSON 数据: None
行 84 的 JSON 数据: None
行 85 的 JSON 数据: None
行 86 的 JSON 数据: None
行 87 的 JSON 数据: None
行 88 的 JSON 数据: None
行 89 的 JSON 数据: None
行 90 的 JSON 数据: None
行 91 的 JSON 数据: None
行 92 的 JSON 数据: None
行 93 的 JSON 数据: None
XLSX文件已读取
** no cases in this file, skip it.
=== [ 执行测试用例 ] ===
=== [ 执行测试用例 ] ===
...
@@ -102,7 +129,7 @@ XLSX文件已读取
...
@@ -102,7 +129,7 @@ XLSX文件已读取
========= 测试开始 : 20250506_1
7461
1 =========
========= 测试开始 : 20250506_1
9085
1 =========
...
@@ -113,8 +140,8 @@ XLSX文件已读取
...
@@ -113,8 +140,8 @@ XLSX文件已读取
-- 第 1 步 -- 初始化设备1的adb连接
-- 第 1 步 -- 初始化设备1的adb连接
'----------' 正在初始化ADB连接 '----------'
'----------' 正在初始化ADB连接 '----------'
尝试连接到设备: 192.168.1.1
28
:5555
尝试连接到设备: 192.168.1.1
57
:5555
设备 192.168.1.1
28
:5555 已连接并可用
设备 192.168.1.1
57
:5555 已连接并可用
** 检查点 ** 设备1的adb连接初始化检测 ----> 通过
** 检查点 ** 设备1的adb连接初始化检测 ----> 通过
...
@@ -124,7 +151,43 @@ XLSX文件已读取
...
@@ -124,7 +151,43 @@ XLSX文件已读取
>>> cases\01门口屏首次安装部署\安装部署流程.py
>>> cases\01门口屏首次安装部署\安装部署流程.py
* 首次安装部署功能 - 2025-05-06 1
7:46:1
3
* 首次安装部署功能 - 2025-05-06 1
9:08:5
3
[ case execution steps ]
[ case execution steps ]
APP获取到的文本信息:测试会议室
ABORT 多次尝试输入文本失败: -android uiautomator=new UiSelector().description("b88be59fe83911ee85f904ed33f5b46d")
Traceback:
File "D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py", line 72, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File "D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py", line 972, in input_text_with_retry
raise Exception(f"多次尝试输入文本失败: {by}={value}")
Exception: 多次尝试输入文本失败: -android uiautomator=new UiSelector().description("b88be59fe83911ee85f904ed33f5b46d")
[ suite teardown ] cases\01门口屏首次安装部署\
ADB 连接已断开: 192.168.5.156:5555
清除浏览器
========= 测试结束 : 20250506_191021 =========
耗时 : 90.005 秒
预备执行用例数量 : 1
实际执行用例数量 : 1
通过 : 0
失败 : 0
异常 : 1
套件初始化失败 : 0
套件清除 失败 : 0
用例初始化失败 : 0
用例清除 失败 : 0
预定配套件/中控门口屏/log/testresult.log.1
浏览文件 @
a0b6354e
...
@@ -12,89 +12,116 @@
...
@@ -12,89 +12,116 @@
"name": "首次安装部署功能",
"name": "首次安装部署功能",
"para": [{
"para": [{
"page": "Deployment",
"page": "Deployment",
"locator_type": "
XPATH
",
"locator_type": "
ANDROID_UIAUTOMATOR
",
"locator_value": "
/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText
",
"locator_value": "
new UiSelector().description(\"b88be59fe83911ee85f904ed33f5b46d\")
",
"element_type": "
send
",
"element_type": "
input
",
"element_value": "192.168.5.235",
"element_value": "192.168.5.235",
"expented_result": "",
"expented_result": "",
"sleep_time":2
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[2]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time": 10
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText",
"element_type": "send",
"element_value": "测试会议室",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[1]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.TextView",
"element_type": "getText",
"element_value": "",
"expented_result": "测试会议室",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[3]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]/android.widget.Button[2]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "XPATH",
"locator_value": "",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":10
}
}
]
]
}
}
XLSX文件已读取
XLSX文件已读取
== cases\02门口屏会议显示界面\__st__.py
== cases\02门口屏会议显示界面\门口屏首页界面功能.py
行 4 的 JSON 数据: None
行 5 的 JSON 数据: None
行 6 的 JSON 数据: None
行 7 的 JSON 数据: None
行 8 的 JSON 数据: None
行 9 的 JSON 数据: None
行 10 的 JSON 数据: None
行 11 的 JSON 数据: None
行 12 的 JSON 数据: None
行 13 的 JSON 数据: None
行 14 的 JSON 数据: None
行 15 的 JSON 数据: None
行 16 的 JSON 数据: None
行 17 的 JSON 数据: None
行 18 的 JSON 数据: None
行 19 的 JSON 数据: None
行 20 的 JSON 数据: None
行 21 的 JSON 数据: None
行 22 的 JSON 数据: None
行 23 的 JSON 数据: None
行 24 的 JSON 数据: None
行 25 的 JSON 数据: None
行 26 的 JSON 数据: None
行 27 的 JSON 数据: None
行 28 的 JSON 数据: None
行 29 的 JSON 数据: None
行 30 的 JSON 数据: None
行 31 的 JSON 数据: None
行 32 的 JSON 数据: None
行 33 的 JSON 数据: None
行 34 的 JSON 数据: None
行 35 的 JSON 数据: None
行 36 的 JSON 数据: None
行 37 的 JSON 数据: None
行 38 的 JSON 数据: None
行 39 的 JSON 数据: None
行 40 的 JSON 数据: None
行 41 的 JSON 数据: None
行 42 的 JSON 数据: None
行 43 的 JSON 数据: None
行 44 的 JSON 数据: None
行 45 的 JSON 数据: None
行 46 的 JSON 数据: None
行 47 的 JSON 数据: None
行 48 的 JSON 数据: None
行 49 的 JSON 数据: None
行 50 的 JSON 数据: None
行 51 的 JSON 数据: None
行 52 的 JSON 数据: None
行 53 的 JSON 数据: None
行 54 的 JSON 数据: None
行 55 的 JSON 数据: None
行 56 的 JSON 数据: None
行 57 的 JSON 数据: None
行 58 的 JSON 数据: None
行 59 的 JSON 数据: None
行 60 的 JSON 数据: None
行 61 的 JSON 数据: None
行 62 的 JSON 数据: None
行 63 的 JSON 数据: None
行 64 的 JSON 数据: None
行 65 的 JSON 数据: None
行 66 的 JSON 数据: None
行 67 的 JSON 数据: None
行 68 的 JSON 数据: None
行 69 的 JSON 数据: None
行 70 的 JSON 数据: None
行 71 的 JSON 数据: None
行 72 的 JSON 数据: None
行 73 的 JSON 数据: None
行 74 的 JSON 数据: None
行 75 的 JSON 数据: None
行 76 的 JSON 数据: None
行 77 的 JSON 数据: None
行 78 的 JSON 数据: None
行 79 的 JSON 数据: None
行 80 的 JSON 数据: None
行 81 的 JSON 数据: None
行 82 的 JSON 数据: None
行 83 的 JSON 数据: None
行 84 的 JSON 数据: None
行 85 的 JSON 数据: None
行 86 的 JSON 数据: None
行 87 的 JSON 数据: None
行 88 的 JSON 数据: None
行 89 的 JSON 数据: None
行 90 的 JSON 数据: None
行 91 的 JSON 数据: None
行 92 的 JSON 数据: None
行 93 的 JSON 数据: None
XLSX文件已读取
** no cases in this file, skip it.
=== [ 执行测试用例 ] ===
=== [ 执行测试用例 ] ===
...
@@ -102,7 +129,7 @@ XLSX文件已读取
...
@@ -102,7 +129,7 @@ XLSX文件已读取
========= 测试开始 : 20250506_1
74427
=========
========= 测试开始 : 20250506_1
90829
=========
...
@@ -114,16 +141,40 @@ XLSX文件已读取
...
@@ -114,16 +141,40 @@ XLSX文件已读取
'----------' 正在初始化ADB连接 '----------'
'----------' 正在初始化ADB连接 '----------'
尝试连接到设备: 192.168.1.128:5555
尝试连接到设备: 192.168.1.128:5555
设备 192.168.1.128:5555 已连接并可用
设备 192.168.1.128:5555 未找到,请检查设备IP是否正确!
** 检查点 ** 设备1的adb连接初始化检测 ----> !! 不通过!!
suite setup fail | 'NoneType' object has no attribute 'execRet'
Traceback:
File "D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\__st__.py", line 24, in suite_setup
CHECK_POINT("设备1的adb连接初始化检测", app_init(device_ip1) == True)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 71, in CHECK_POINT
Runner.curRunningCase.execRet='fail'
AttributeError: 'NoneType' object has no attribute 'execRet'
========= 测试结束 : 20250506_190831 =========
耗时 : 2.744 秒
预备执行用例数量 : 1
实际执行用例数量 : 0
通过 : 0
** 检查点 ** 设备1的adb连接初始化检测 ----> 通过
失败 : 0
'----------' 正在初始化浏览器 '----------'
异常 : 0
'----------' 浏览器初始化完成 '----------'
套件初始化失败 : 1
>>> cases\01门口屏首次安装部署\安装部署流程.py
套件清除 失败 : 0
* 首次安装部署功能 - 2025-05-06 17:44:29
用例初始化失败 : 0
[ case execution steps ]
用例清除 失败 : 0
预定配套件/中控门口屏/log/testresult.log.2
浏览文件 @
a0b6354e
...
@@ -12,89 +12,116 @@
...
@@ -12,89 +12,116 @@
"name": "首次安装部署功能",
"name": "首次安装部署功能",
"para": [{
"para": [{
"page": "Deployment",
"page": "Deployment",
"locator_type": "
xpath
",
"locator_type": "
ANDROID_UIAUTOMATOR
",
"locator_value": "
/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText
",
"locator_value": "
new UiSelector().description(\"b88be59fe83911ee85f904ed33f5b46d\")
",
"element_type": "
send
",
"element_type": "
input
",
"element_value": "192.168.5.235",
"element_value": "192.168.5.235",
"expented_result": "",
"expented_result": "",
"sleep_time":2
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "xpath",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[2]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time": 10
},
{
"page": "Deployment",
"locator_type": "xpath",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText",
"element_type": "send",
"element_value": "测试会议室",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "xpath",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[1]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "xpath",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.TextView",
"element_type": "getText",
"element_value": "",
"expented_result": "测试会议室",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "xpath",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "xpath",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[3]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "xpath",
"locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]/android.widget.Button[2]",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":2
},
{
"page": "Deployment",
"locator_type": "xpath",
"locator_value": "",
"element_type": "click",
"element_value": "",
"expented_result": "",
"sleep_time":10
}
}
]
]
}
}
XLSX文件已读取
XLSX文件已读取
== cases\02门口屏会议显示界面\__st__.py
== cases\02门口屏会议显示界面\门口屏首页界面功能.py
行 4 的 JSON 数据: None
行 5 的 JSON 数据: None
行 6 的 JSON 数据: None
行 7 的 JSON 数据: None
行 8 的 JSON 数据: None
行 9 的 JSON 数据: None
行 10 的 JSON 数据: None
行 11 的 JSON 数据: None
行 12 的 JSON 数据: None
行 13 的 JSON 数据: None
行 14 的 JSON 数据: None
行 15 的 JSON 数据: None
行 16 的 JSON 数据: None
行 17 的 JSON 数据: None
行 18 的 JSON 数据: None
行 19 的 JSON 数据: None
行 20 的 JSON 数据: None
行 21 的 JSON 数据: None
行 22 的 JSON 数据: None
行 23 的 JSON 数据: None
行 24 的 JSON 数据: None
行 25 的 JSON 数据: None
行 26 的 JSON 数据: None
行 27 的 JSON 数据: None
行 28 的 JSON 数据: None
行 29 的 JSON 数据: None
行 30 的 JSON 数据: None
行 31 的 JSON 数据: None
行 32 的 JSON 数据: None
行 33 的 JSON 数据: None
行 34 的 JSON 数据: None
行 35 的 JSON 数据: None
行 36 的 JSON 数据: None
行 37 的 JSON 数据: None
行 38 的 JSON 数据: None
行 39 的 JSON 数据: None
行 40 的 JSON 数据: None
行 41 的 JSON 数据: None
行 42 的 JSON 数据: None
行 43 的 JSON 数据: None
行 44 的 JSON 数据: None
行 45 的 JSON 数据: None
行 46 的 JSON 数据: None
行 47 的 JSON 数据: None
行 48 的 JSON 数据: None
行 49 的 JSON 数据: None
行 50 的 JSON 数据: None
行 51 的 JSON 数据: None
行 52 的 JSON 数据: None
行 53 的 JSON 数据: None
行 54 的 JSON 数据: None
行 55 的 JSON 数据: None
行 56 的 JSON 数据: None
行 57 的 JSON 数据: None
行 58 的 JSON 数据: None
行 59 的 JSON 数据: None
行 60 的 JSON 数据: None
行 61 的 JSON 数据: None
行 62 的 JSON 数据: None
行 63 的 JSON 数据: None
行 64 的 JSON 数据: None
行 65 的 JSON 数据: None
行 66 的 JSON 数据: None
行 67 的 JSON 数据: None
行 68 的 JSON 数据: None
行 69 的 JSON 数据: None
行 70 的 JSON 数据: None
行 71 的 JSON 数据: None
行 72 的 JSON 数据: None
行 73 的 JSON 数据: None
行 74 的 JSON 数据: None
行 75 的 JSON 数据: None
行 76 的 JSON 数据: None
行 77 的 JSON 数据: None
行 78 的 JSON 数据: None
行 79 的 JSON 数据: None
行 80 的 JSON 数据: None
行 81 的 JSON 数据: None
行 82 的 JSON 数据: None
行 83 的 JSON 数据: None
行 84 的 JSON 数据: None
行 85 的 JSON 数据: None
行 86 的 JSON 数据: None
行 87 的 JSON 数据: None
行 88 的 JSON 数据: None
行 89 的 JSON 数据: None
行 90 的 JSON 数据: None
行 91 的 JSON 数据: None
行 92 的 JSON 数据: None
行 93 的 JSON 数据: None
XLSX文件已读取
** no cases in this file, skip it.
=== [ 执行测试用例 ] ===
=== [ 执行测试用例 ] ===
...
@@ -102,7 +129,7 @@ XLSX文件已读取
...
@@ -102,7 +129,7 @@ XLSX文件已读取
========= 测试开始 : 20250506_1
74239
=========
========= 测试开始 : 20250506_1
90757
=========
...
@@ -114,16 +141,40 @@ XLSX文件已读取
...
@@ -114,16 +141,40 @@ XLSX文件已读取
'----------' 正在初始化ADB连接 '----------'
'----------' 正在初始化ADB连接 '----------'
尝试连接到设备: 192.168.1.128:5555
尝试连接到设备: 192.168.1.128:5555
设备 192.168.1.128:5555 已连接并可用
设备 192.168.1.128:5555 未找到,请检查设备IP是否正确!
** 检查点 ** 设备1的adb连接初始化检测 ----> !! 不通过!!
suite setup fail | 'NoneType' object has no attribute 'execRet'
Traceback:
File "D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\__st__.py", line 24, in suite_setup
CHECK_POINT("设备1的adb连接初始化检测", app_init(device_ip1) == True)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 71, in CHECK_POINT
Runner.curRunningCase.execRet='fail'
AttributeError: 'NoneType' object has no attribute 'execRet'
========= 测试结束 : 20250506_190800 =========
耗时 : 2.713 秒
预备执行用例数量 : 1
实际执行用例数量 : 0
通过 : 0
** 检查点 ** 设备1的adb连接初始化检测 ----> 通过
失败 : 0
'----------' 正在初始化浏览器 '----------'
异常 : 0
'----------' 浏览器初始化完成 '----------'
套件初始化失败 : 1
>>> cases\01门口屏首次安装部署\安装部署流程.py
套件清除 失败 : 0
* 首次安装部署功能 - 2025-05-06 17:42:41
用例初始化失败 : 0
[ case execution steps ]
用例清除 失败 : 0
预定配套件/中控门口屏/reports/report_20250506_183631.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 18:36:31
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 18:37:27
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
56.244 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
实际执用例行数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
通过
</td>
<td>
0
</td>
</tr>
<tr>
<td>
失败
</td>
<td
style=
""
>
0
</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>
<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>
用例通过 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>
用例异常 100% : 1 个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 100.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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:36:31
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化浏览器 '----------'
</div>
<div
class=
"info"
>
'----------' 浏览器初始化完成 '----------'
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\01门口屏首次安装部署\安装部署流程.py"
>
<div>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\01门口屏首次安装部署\安装部署流程.py
</span>
</div>
<div
class=
"case abort"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例 ABORT
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-05-06 18:36:33
</span>
</div>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps 首次安装部署功能"
>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: accessibility id=b88be59fe83911ee85f904ed33f5b46d
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 71, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 968, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: accessibility id=b88be59fe83911ee85f904ed33f5b46d
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:37:25
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.156:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/reports/report_20250506_183851.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 18:38:51
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 18:39:46
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
55.768 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
实际执用例行数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
通过
</td>
<td>
0
</td>
</tr>
<tr>
<td>
失败
</td>
<td
style=
""
>
0
</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>
<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>
用例通过 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>
用例异常 100% : 1 个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 100.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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:38:51
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化浏览器 '----------'
</div>
<div
class=
"info"
>
'----------' 浏览器初始化完成 '----------'
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\01门口屏首次安装部署\安装部署流程.py"
>
<div>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\01门口屏首次安装部署\安装部署流程.py
</span>
</div>
<div
class=
"case abort"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例 ABORT
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-05-06 18:38:52
</span>
</div>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps 首次安装部署功能"
>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: accessibility id=b88be59fe83911ee85f904ed33f5b46d
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 71, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 968, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: accessibility id=b88be59fe83911ee85f904ed33f5b46d
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:39:44
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.156:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/reports/report_20250506_185048.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 18:50:48
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 18:51:26
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
37.837 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
实际执用例行数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
通过
</td>
<td>
0
</td>
</tr>
<tr>
<td>
失败
</td>
<td
style=
""
>
0
</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>
<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>
用例通过 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>
用例异常 100% : 1 个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 100.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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:50:48
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化浏览器 '----------'
</div>
<div
class=
"info"
>
'----------' 浏览器初始化完成 '----------'
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\01门口屏首次安装部署\安装部署流程.py"
>
<div>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\01门口屏首次安装部署\安装部署流程.py
</span>
</div>
<div
class=
"case abort"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例 ABORT
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-05-06 18:50:50
</span>
</div>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps 首次安装部署功能"
>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: -android uiautomator=b88be59fe83911ee85f904ed33f5b46d
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 72, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 972, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: -android uiautomator=b88be59fe83911ee85f904ed33f5b46d
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:51:24
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.156:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/reports/report_20250506_185550.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 18:55:50
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 18:57:19
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
88.871 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
实际执用例行数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
通过
</td>
<td>
0
</td>
</tr>
<tr>
<td>
失败
</td>
<td
style=
""
>
0
</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>
<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>
用例通过 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>
用例异常 100% : 1 个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 100.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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:55:50
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化浏览器 '----------'
</div>
<div
class=
"info"
>
'----------' 浏览器初始化完成 '----------'
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\01门口屏首次安装部署\安装部署流程.py"
>
<div>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\01门口屏首次安装部署\安装部署流程.py
</span>
</div>
<div
class=
"case abort"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例 ABORT
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-05-06 18:55:52
</span>
</div>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps 首次安装部署功能"
>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: -android uiautomator='new UiSelector().description('b88be59fe83911ee85f904ed33f5b46d')'
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 72, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 972, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: -android uiautomator='new UiSelector().description('b88be59fe83911ee85f904ed33f5b46d')'
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 18:57:17
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.156:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/reports/report_20250506_190503.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 19:05:03
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 19:05:06
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
2.714 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</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"
>
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>
<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% : 1 个
</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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup fail"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:05:03
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 未找到,请检查设备IP是否正确!
</div>
<div
class=
"checkpoint_fail"
>
<span
class=
"tag"
>
检查点 FAIL
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info error-info"
>
suite setup fail | 'NoneType' object has no attribute 'execRet'
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\__st__.py
"
, line 24, in suite_setup
CHECK_POINT(
"
设备1的adb连接初始化检测
"
, app_init(device_ip1) == True)
File
"
C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py
"
, line 71, in CHECK_POINT
Runner.curRunningCase.execRet='fail'
AttributeError: 'NoneType' object has no attribute 'execRet'
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/reports/report_20250506_190757.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 19:07:57
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 19:08:00
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
2.713 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</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"
>
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>
<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% : 1 个
</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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup fail"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:07:57
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 未找到,请检查设备IP是否正确!
</div>
<div
class=
"checkpoint_fail"
>
<span
class=
"tag"
>
检查点 FAIL
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info error-info"
>
suite setup fail | 'NoneType' object has no attribute 'execRet'
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\__st__.py
"
, line 24, in suite_setup
CHECK_POINT(
"
设备1的adb连接初始化检测
"
, app_init(device_ip1) == True)
File
"
C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py
"
, line 71, in CHECK_POINT
Runner.curRunningCase.execRet='fail'
AttributeError: 'NoneType' object has no attribute 'execRet'
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/reports/report_20250506_190829.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 19:08:29
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 19:08:31
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
2.744 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</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"
>
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>
<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% : 1 个
</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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup fail"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:08:29
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.128:5555
</div>
<div
class=
"info"
>
设备 192.168.1.128:5555 未找到,请检查设备IP是否正确!
</div>
<div
class=
"checkpoint_fail"
>
<span
class=
"tag"
>
检查点 FAIL
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info error-info"
>
suite setup fail | 'NoneType' object has no attribute 'execRet'
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\__st__.py
"
, line 24, in suite_setup
CHECK_POINT(
"
设备1的adb连接初始化检测
"
, app_init(device_ip1) == True)
File
"
C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py
"
, line 71, in CHECK_POINT
Runner.curRunningCase.execRet='fail'
AttributeError: 'NoneType' object has no attribute 'execRet'
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/中控门口屏/reports/report_20250506_190851.html
0 → 100644
浏览文件 @
a0b6354e
<!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
:
1
fr
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/05/06 19:08:51
</td>
</tr>
<tr>
<td>
结束时间
</td>
<td>
2025/05/06 19:10:21
</td>
</tr>
<tr>
<td>
耗时
</td>
<td>
90.005 秒
</td>
</tr>
<tr>
<td>
预备执行用例数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
实际执用例行数量
</td>
<td>
1
</td>
</tr>
<tr>
<td>
通过
</td>
<td>
0
</td>
</tr>
<tr>
<td>
失败
</td>
<td
style=
""
>
0
</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>
<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>
用例通过 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>
用例异常 100% : 1 个
</span>
<div
class=
"barchart_barbox"
>
<div
class=
"barchart_bar"
style=
"width: 100.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\01门口屏首次安装部署\"
>
<div>
<span
class=
"label"
>
进入目录
</span>
<span>
cases\01门口屏首次安装部署\
</span>
</div>
<div
class=
"suite_setup setup"
id=
"suite_setup setup cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件初始化
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:08:51
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"case_step"
>
<span
class=
"tag"
>
步骤 #1
</span>
<span>
初始化设备1的adb连接
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化ADB连接 '----------'
</div>
<div
class=
"info"
>
尝试连接到设备: 192.168.1.157:5555
</div>
<div
class=
"info"
>
设备 192.168.1.157:5555 已连接并可用
</div>
<div
class=
"checkpoint_pass"
>
<span
class=
"tag"
>
检查点 PASS
</span>
<span>
设备1的adb连接初始化检测
</span>
</div>
<div
class=
"info"
>
'----------' 正在初始化浏览器 '----------'
</div>
<div
class=
"info"
>
'----------' 浏览器初始化完成 '----------'
</div>
</div>
</div>
</div>
<div
class=
"suite_file"
id=
"suite_file cases\01门口屏首次安装部署\安装部署流程.py"
>
<div>
<span
class=
"label"
>
进入文件
</span>
<span>
cases\01门口屏首次安装部署\安装部署流程.py
</span>
</div>
<div
class=
"case abort"
id=
"case_00000001"
>
<div
class=
"folder_header"
>
<span
class=
"label caselabel"
>
用例 ABORT
</span>
<span
class=
"casename"
>
首次安装部署功能
</span>
<span
class=
"executetime"
>
2025-05-06 19:08:53
</span>
</div>
<div
class=
"folder_body"
>
<span
class=
"case_class_path"
>
cases\01门口屏首次安装部署\安装部署流程.py::DoorScreenDeployment
</span>
<div
class=
"test_steps"
id=
"test_steps 首次安装部署功能"
>
<span
class=
"label"
>
测试步骤
</span>
<div
class=
"info error-info"
>
多次尝试输入文本失败: -android uiautomator=new UiSelector().description(
"
b88be59fe83911ee85f904ed33f5b46d
"
)
Traceback:
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py
"
, line 72, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File
"
D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py
"
, line 972, in input_text_with_retry
raise Exception(f
"
多次尝试输入文本失败: {by}={value}
"
)
Exception: 多次尝试输入文本失败: -android uiautomator=new UiSelector().description(
"
b88be59fe83911ee85f904ed33f5b46d
"
)
</div>
</div>
</div>
</div>
<div
class=
"suite_teardown teardown"
id=
"suite_teardown teardown cases\01门口屏首次安装部署\"
>
<div
class=
"folder_header"
>
<span
class=
"label"
>
套件清除
</span>
<span>
cases\01门口屏首次安装部署\
</span>
<span
class=
"executetime"
>
2025-05-06 19:10:19
</span>
</div>
<div
class=
"folder_body"
>
<div
class=
"info"
>
ADB 连接已断开: 192.168.5.156:5555
</div>
<div
class=
"info"
>
清除浏览器
</div>
</div>
</div>
</div>
</div>
</div>
<div
id=
"float_menu"
>
<div
class=
"menu-item"
onclick=
"document.querySelector("body").scrollIntoView()"
>
页首
</div>
<div
class=
"menu-item"
onclick=
"window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); "
>
帮助
</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
预定配套件/测试数据/门口屏5.0测试用例.xlsx
浏览文件 @
a0b6354e
No preview for this file type
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论