提交 498c8ae1 authored 作者: 陈泽健's avatar 陈泽健

处理展厅巡检中控屏的信息发布屏流程步骤缺失问题,增加异常重试机制。

上级 00f28b10
......@@ -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):
......
......@@ -223,4 +223,5 @@
- 补充图片对比函数,还需调整一下判断的图像点阈值。
- 讯飞系统的定位元素改为CSS,因国际化导致原先的XPATH可能会由变化。
58. 2025-02-22
- 排查展厅巡检报告中无纸化会议操作的截图显示错误问题,补充上一无纸化同屏流程的结束同屏操作步骤。在初始化函数补充adb连接是否可用的判断,如连接失败,则不进行后续操作。
\ No newline at end of file
- 排查展厅巡检报告中无纸化会议操作的截图显示错误问题,补充上一无纸化同屏流程的结束同屏操作步骤。在初始化函数补充adb连接是否可用的判断,如连接失败,则不进行后续操作。
- 处理展厅巡检中控屏的信息发布屏流程步骤缺失问题,增加异常重试机制。
\ No newline at end of file
......@@ -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("展厅预定巡检")
......
......@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论