Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录
切换导航
U
ubains-module-test
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
郑晓兵
ubains-module-test
Commits
498c8ae1
提交
498c8ae1
authored
2月 22, 2025
作者:
陈泽健
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
处理展厅巡检中控屏的信息发布屏流程步骤缺失问题,增加异常重试机制。
上级
00f28b10
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
164 行增加
和
123 行删除
+164
-123
app_base.cpython-310.pyc
预定系统/Base/__pycache__/app_base.cpython-310.pyc
+0
-0
app_base.py
预定系统/Base/app_base.py
+10
-2
README.md
预定系统/README.md
+3
-2
__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
+4
-1
展厅中控屏.py
预定系统/cases/展厅巡检/01展厅中控屏/展厅中控屏.py
+147
-118
没有找到文件。
预定系统/Base/__pycache__/app_base.cpython-310.pyc
浏览文件 @
498c8ae1
No preview for this file type
预定系统/Base/app_base.py
浏览文件 @
498c8ae1
...
...
@@ -529,10 +529,18 @@ def information_control(app_drive,wd):
logging
.
error
(
"帧捕获失败"
)
# 点击信息发布关闭按钮
logging
.
info
(
"点击信息发布关闭按钮"
)
INFO
(
"点击信息发布关闭按钮"
)
information_close_button
=
app_drive
.
find_element
(
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[
7
]"
)
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[
6
]"
)
information_close_button
.
click
()
# 这是信发屏已关闭的界面
INFO
(
"请检查中控屏软件信息发布界面是否正常显示为关闭"
)
SELENIUM_LOG_SCREEN
(
wd
,
"50
%
"
,
"Exhibit_Inspect"
,
"Control_Manage"
,
"information_off"
)
if
capture_frame_from_rtsp
(
information_rtsp_url
,
"information_off.png"
):
logging
.
info
(
"帧捕获成功"
)
else
:
logging
.
error
(
"帧捕获失败"
)
def
music_control
(
app_drive
,
wd
):
...
...
预定系统/README.md
浏览文件 @
498c8ae1
...
...
@@ -223,4 +223,5 @@
-
补充图片对比函数,还需调整一下判断的图像点阈值。
-
讯飞系统的定位元素改为CSS,因国际化导致原先的XPATH可能会由变化。
58.
2025-02-22
-
排查展厅巡检报告中无纸化会议操作的截图显示错误问题,补充上一无纸化同屏流程的结束同屏操作步骤。在初始化函数补充adb连接是否可用的判断,如连接失败,则不进行后续操作。
\ No newline at end of file
-
排查展厅巡检报告中无纸化会议操作的截图显示错误问题,补充上一无纸化同屏流程的结束同屏操作步骤。在初始化函数补充adb连接是否可用的判断,如连接失败,则不进行后续操作。
-
处理展厅巡检中控屏的信息发布屏流程步骤缺失问题,增加异常重试机制。
\ No newline at end of file
预定系统/cases/展厅巡检/01展厅中控屏/__pycache__/__st__.cpython-310.pyc
浏览文件 @
498c8ae1
No preview for this file type
预定系统/cases/展厅巡检/01展厅中控屏/__pycache__/展厅中控屏.cpython-310.pyc
浏览文件 @
498c8ae1
No preview for this file type
预定系统/cases/展厅巡检/01展厅中控屏/__st__.py
浏览文件 @
498c8ae1
...
...
@@ -21,7 +21,10 @@ except ModuleNotFoundError as e:
def
suite_setup
():
STEP
(
1
,
"初始化设备adb连接"
)
device_ip
=
'192.168.5.112'
app_init
(
device_ip
)
# app_init(device_ip)
# 检查设备adb连接状态
CHECK_POINT
(
"设备1的adb连接初始化检测"
,
app_init
(
device_ip
)
==
True
)
check_service_status
(
"192.168.5.200"
,
8080
)
# 传入系统类型,展厅预定巡检 == 192.168.5.200
browser_init
(
"展厅预定巡检"
)
...
...
预定系统/cases/展厅巡检/01展厅中控屏/展厅中控屏.py
浏览文件 @
498c8ae1
...
...
@@ -12,7 +12,7 @@ class Exhibition_hall_Control_000x:
1.cd 预定系统
2.hytest --report_title 展厅中控屏测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 展厅中控屏
"""
tags
=
[
'展厅中控屏'
,
'展厅巡检'
]
tags
=
[
'展厅中控屏'
,
'展厅巡检'
]
def
teststeps
(
self
):
"""
...
...
@@ -31,136 +31,166 @@ class Exhibition_hall_Control_000x:
logging
.
info
(
"等待首页加载..."
)
# 先切换界面,再切回灯光控制
air_button
=
app_drive
.
find_element
(
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[6]"
)
air_button
=
self
.
find_element_with_retry
(
app_drive
,
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[6]"
)
logging
.
info
(
"尝试定位【空气净化】按钮元素,并点击按钮"
)
air_button
.
click
(
)
self
.
click_with_retry
(
air_button
)
sleep
(
10
)
# STEP(2, "检查灯光控制功能")
# # 这是灯光开启前的截图
# INFO("请检查灯光开启前的监控视频状态是否正常")
# SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_down")
#
# # 先截取当前空间的灯光状态图片
# light_rtsp_url = "rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2" # 替换为你的RTSP流地址
# logging.info("开始捕获RTSP流中的帧")
# if capture_frame_from_rtsp(light_rtsp_url, "light_down.png"):
# logging.info("帧捕获成功")
# else:
# logging.error("帧捕获失败")
#
# # 定位灯光控制按钮元素,并点击按钮
# logging.info("尝试定位【灯光控制】按钮元素,并点击按钮")
# light_button = app_drive.find_element(AppiumBy.XPATH,
# "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.Button[3]")
# logging.info("定位成功")
# # 点击【灯光控制】按钮
# light_button.click()
# logging.info("点击【灯光控制】按钮成功")
# sleep(10)
#
# # 这是全部灯光关闭后在软件界面上的状态显示
# INFO("请检查中控屏软件的灯光关闭状态显示是否正常")
# SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_all_off")
#
# # 截图获取当前软件的灯光控制界面
# app_drive.get_screenshot_as_file(
# r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_off.png")
# # 调用灯光控制函数
# light_control(app_drive)
#
# # 这是全部灯光开启后在软件界面上的状态显示
# INFO("请检查中控屏软件的灯光开启状态显示是否正常")
# SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_all_on")
#
# # 截图获取当前软件的灯光控制界面
# app_drive.get_screenshot_as_file(
# r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_on.png")
#
# # 这是灯光开启后的截图
# INFO("请检查灯光开启后的监控视频状态是否正常")
# SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_on")
#
# # 先截取当前空间的灯光状态图片
# light_rtsp_url = "rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2" # 替换为你的RTSP流地址
# logging.info("开始捕获RTSP流中的帧")
# if capture_frame_from_rtsp(light_rtsp_url, "light_on.png"):
# logging.info("帧捕获成功")
# else:
# logging.error("帧捕获失败")
#
# # 切换灯光控制界面
# # 灯光测试结束后关闭灯光
# logging.info("尝试定位【灯光控制】按钮元素,并点击按钮")
# light_button = app_drive.find_element(AppiumBy.XPATH,
# "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.Button[3]")
# logging.info("定位成功")
# # 点击【灯光控制】按钮
# light_button.click()
# sleep(10)
# light_control(app_drive)
#
# STEP(3, "检查窗帘的升降功能")
# # 切换至窗帘控制界面
# logging.info("尝试定位【窗帘控制】按钮元素,并点击按钮")
# curtain_button = app_drive.find_element(AppiumBy.XPATH,
# "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[4]")
# curtain_button.click()
# sleep(2)
# # 调用窗口上升下降的函数
# curtain_control(app_drive,wd)
#
# STEP(3, "检查空调控制是否正常")
# # 切换至空调控制界面
# logging.info("尝试定位【空调控制】按钮元素,并点击按钮")
# air_conditioner_button = app_drive.find_element(AppiumBy.XPATH,
# "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[5]")
# air_conditioner_button.click()
# sleep(2)
# # 调用空调控制的函数
# air_condition_control(app_drive,wd)
#
# STEP(4, "检查指挥大屏控制是否正常")
# # 切换至指挥中心控制界面
# # 打开指挥中心大屏幕
# logging.info("尝试定位【开启指挥中心控制】按钮元素,并点击按钮")
# center_button = app_drive.find_element(AppiumBy.XPATH,
# "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[8]")
# center_button.click()
# sleep(2)
# # 调用指挥中心控制函数
# command_centre_control(light_rtsp_url, app_drive,wd)
#
# STEP(5, "检查音乐控制功能是否正常")
# # 切换至音乐区域
# logging.info("尝试定位【音乐】按钮元素,并点击按钮")
# music_button = app_drive.find_element(AppiumBy.XPATH,
# "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[9]")
# music_button.click()
# sleep(2)
# # 调用音乐控制函数
# music_control(app_drive,wd)
sleep
(
5
)
STEP
(
2
,
"检查灯光控制功能"
)
# 这是灯光开启前的截图
INFO
(
"请检查灯光开启前的监控视频状态是否正常"
)
SELENIUM_LOG_SCREEN
(
wd
,
"75
%
"
,
"Exhibit_Inspect"
,
"Control_Manage"
,
"light_down"
)
# 先截取当前空间的灯光状态图片
light_rtsp_url
=
"rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2"
# 替换为你的RTSP流地址
logging
.
info
(
"开始捕获RTSP流中的帧"
)
if
capture_frame_from_rtsp
(
light_rtsp_url
,
"light_down.png"
):
logging
.
info
(
"帧捕获成功"
)
else
:
logging
.
error
(
"帧捕获失败"
)
# 定位灯光控制按钮元素,并点击按钮
logging
.
info
(
"尝试定位【灯光控制】按钮元素,并点击按钮"
)
light_button
=
self
.
find_element_with_retry
(
app_drive
,
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.Button[3]"
)
logging
.
info
(
"定位成功"
)
# 点击【灯光控制】按钮
self
.
click_with_retry
(
light_button
)
sleep
(
10
)
# 这是全部灯光关闭后在软件界面上的状态显示
INFO
(
"请检查中控屏软件的灯光关闭状态显示是否正常"
)
SELENIUM_LOG_SCREEN
(
wd
,
"75
%
"
,
"Exhibit_Inspect"
,
"Control_Manage"
,
"light_all_off"
)
# 截图获取当前软件的灯光控制界面
self
.
get_screenshot_with_retry
(
app_drive
,
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_off.png"
)
# 调用灯光控制函数
light_control
(
app_drive
)
# 这是全部灯光开启后在软件界面上的状态显示
INFO
(
"请检查中控屏软件的灯光开启状态显示是否正常"
)
SELENIUM_LOG_SCREEN
(
wd
,
"75
%
"
,
"Exhibit_Inspect"
,
"Control_Manage"
,
"light_all_on"
)
# 截图获取当前软件的灯光控制界面
self
.
get_screenshot_with_retry
(
app_drive
,
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_on.png"
)
# 这是灯光开启后的截图
INFO
(
"请检查灯光开启后的监控视频状态是否正常"
)
SELENIUM_LOG_SCREEN
(
wd
,
"75
%
"
,
"Exhibit_Inspect"
,
"Control_Manage"
,
"light_on"
)
# 先截取当前空间的灯光状态图片
light_rtsp_url
=
"rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2"
# 替换为你的RTSP流地址
logging
.
info
(
"开始捕获RTSP流中的帧"
)
if
capture_frame_from_rtsp
(
light_rtsp_url
,
"light_on.png"
):
logging
.
info
(
"帧捕获成功"
)
else
:
logging
.
error
(
"帧捕获失败"
)
# 切换灯光控制界面
# 灯光测试结束后关闭灯光
logging
.
info
(
"尝试定位【灯光控制】按钮元素,并点击按钮"
)
light_button
=
self
.
find_element_with_retry
(
app_drive
,
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.Button[3]"
)
logging
.
info
(
"定位成功"
)
# 点击【灯光控制】按钮
self
.
click_with_retry
(
light_button
)
sleep
(
10
)
light_control
(
app_drive
)
STEP
(
3
,
"检查窗帘的升降功能"
)
# 切换至窗帘控制界面
logging
.
info
(
"尝试定位【窗帘控制】按钮元素,并点击按钮"
)
curtain_button
=
self
.
find_element_with_retry
(
app_drive
,
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[4]"
)
self
.
click_with_retry
(
curtain_button
)
sleep
(
10
)
# 调用窗口上升下降的函数
curtain_control
(
app_drive
,
wd
)
STEP
(
3
,
"检查空调控制是否正常"
)
# 切换至空调控制界面
logging
.
info
(
"尝试定位【空调控制】按钮元素,并点击按钮"
)
air_conditioner_button
=
self
.
find_element_with_retry
(
app_drive
,
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[5]"
)
self
.
click_with_retry
(
air_conditioner_button
)
sleep
(
10
)
# 调用空调控制的函数
air_condition_control
(
app_drive
,
wd
)
STEP
(
4
,
"检查指挥大屏控制是否正常"
)
# 切换至指挥中心控制界面
# 打开指挥中心大屏幕
logging
.
info
(
"尝试定位【开启指挥中心控制】按钮元素,并点击按钮"
)
center_button
=
self
.
find_element_with_retry
(
app_drive
,
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[8]"
)
self
.
click_with_retry
(
center_button
)
sleep
(
10
)
# 调用指挥中心控制函数
command_centre_control
(
light_rtsp_url
,
app_drive
,
wd
)
STEP
(
5
,
"检查音乐控制功能是否正常"
)
# 切换至音乐区域
logging
.
info
(
"尝试定位【音乐】按钮元素,并点击按钮"
)
music_button
=
self
.
find_element_with_retry
(
app_drive
,
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[9]"
)
self
.
click_with_retry
(
music_button
)
sleep
(
2
)
# 调用音乐控制函数
music_control
(
app_drive
,
wd
)
sleep
(
10
)
STEP
(
6
,
"检查信息发布界面发布内容功能是否正常"
)
logging
.
info
(
"尝试定位【发布屏】按钮元素,并点击按钮"
)
information_delivery
=
app_drive
.
find_element
(
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[7]"
)
information_delivery
=
self
.
find_element_with_retry
(
app_drive
,
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[7]"
)
logging
.
info
(
"定位成功"
)
information_delivery
.
click
(
)
self
.
click_with_retry
(
information_delivery
)
sleep
(
5
)
# 打开信息发布播放
information_on_button
=
app_drive
.
find_element
(
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[6]"
)
information_on_button
=
self
.
find_element_with_retry
(
app_drive
,
AppiumBy
.
XPATH
,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[6]"
)
logging
.
info
(
"定位“发布屏”开启按钮"
)
information_on_button
.
click
(
)
self
.
click_with_retry
(
information_on_button
)
sleep
(
5
)
logging
.
info
(
"信息发布播放开启成功"
)
# 调用信息发布控制函数
information_control
(
app_drive
,
wd
)
information_control
(
app_drive
,
wd
)
except
Exception
as
e
:
# 捕获并记录任何发生的错误
logging
.
error
(
f
"发生错误: {e}"
,
exc_info
=
True
)
\ No newline at end of file
logging
.
error
(
f
"发生错误: {e}"
,
exc_info
=
True
)
def
find_element_with_retry
(
self
,
driver
,
by
,
value
,
max_retries
=
3
,
retry_delay
=
5
):
for
_
in
range
(
max_retries
):
try
:
return
driver
.
find_element
(
by
,
value
)
except
Exception
as
e
:
logging
.
warning
(
f
"查找元素失败,重试中... ({e})"
)
sleep
(
retry_delay
)
raise
Exception
(
f
"多次尝试查找元素失败: {by}={value}"
)
def
get_screenshot_with_retry
(
self
,
driver
,
file_path
,
max_retries
=
3
,
retry_delay
=
5
):
for
_
in
range
(
max_retries
):
try
:
driver
.
get_screenshot_as_file
(
file_path
)
logging
.
info
(
f
"截图保存成功: {file_path}"
)
return
except
Exception
as
e
:
logging
.
warning
(
f
"截图失败,重试中... ({e})"
)
sleep
(
retry_delay
)
raise
Exception
(
f
"多次尝试截图失败: {file_path}"
)
def
click_with_retry
(
self
,
element
,
max_retries
=
3
,
retry_delay
=
5
):
for
_
in
range
(
max_retries
):
try
:
element
.
click
()
logging
.
info
(
f
"点击元素成功: {element}"
)
return
except
Exception
as
e
:
logging
.
warning
(
f
"点击元素失败,重试中... ({e})"
)
sleep
(
retry_delay
)
raise
Exception
(
f
"多次尝试点击元素失败: {element}"
)
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论