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

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

上级 00f28b10
...@@ -529,10 +529,18 @@ def information_control(app_drive,wd): ...@@ -529,10 +529,18 @@ def information_control(app_drive,wd):
logging.error("帧捕获失败") logging.error("帧捕获失败")
# 点击信息发布关闭按钮 # 点击信息发布关闭按钮
logging.info("点击信息发布关闭按钮") INFO("点击信息发布关闭按钮")
information_close_button = app_drive.find_element(AppiumBy.XPATH, 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() 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): def music_control(app_drive,wd):
......
...@@ -223,4 +223,5 @@ ...@@ -223,4 +223,5 @@
- 补充图片对比函数,还需调整一下判断的图像点阈值。 - 补充图片对比函数,还需调整一下判断的图像点阈值。
- 讯飞系统的定位元素改为CSS,因国际化导致原先的XPATH可能会由变化。 - 讯飞系统的定位元素改为CSS,因国际化导致原先的XPATH可能会由变化。
58. 2025-02-22 58. 2025-02-22
- 排查展厅巡检报告中无纸化会议操作的截图显示错误问题,补充上一无纸化同屏流程的结束同屏操作步骤。在初始化函数补充adb连接是否可用的判断,如连接失败,则不进行后续操作。 - 排查展厅巡检报告中无纸化会议操作的截图显示错误问题,补充上一无纸化同屏流程的结束同屏操作步骤。在初始化函数补充adb连接是否可用的判断,如连接失败,则不进行后续操作。
\ No newline at end of file - 处理展厅巡检中控屏的信息发布屏流程步骤缺失问题,增加异常重试机制。
\ No newline at end of file
...@@ -21,7 +21,10 @@ except ModuleNotFoundError as e: ...@@ -21,7 +21,10 @@ except ModuleNotFoundError as e:
def suite_setup(): def suite_setup():
STEP(1, "初始化设备adb连接") STEP(1, "初始化设备adb连接")
device_ip = '192.168.5.112' 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) check_service_status("192.168.5.200", 8080)
# 传入系统类型,展厅预定巡检 == 192.168.5.200 # 传入系统类型,展厅预定巡检 == 192.168.5.200
browser_init("展厅预定巡检") browser_init("展厅预定巡检")
......
...@@ -12,7 +12,7 @@ class Exhibition_hall_Control_000x: ...@@ -12,7 +12,7 @@ class Exhibition_hall_Control_000x:
1.cd 预定系统 1.cd 预定系统
2.hytest --report_title 展厅中控屏测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 展厅中控屏 2.hytest --report_title 展厅中控屏测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 展厅中控屏
""" """
tags = ['展厅中控屏','展厅巡检'] tags = ['展厅中控屏', '展厅巡检']
def teststeps(self): def teststeps(self):
""" """
...@@ -31,136 +31,166 @@ class Exhibition_hall_Control_000x: ...@@ -31,136 +31,166 @@ class Exhibition_hall_Control_000x:
logging.info("等待首页加载...") logging.info("等待首页加载...")
# 先切换界面,再切回灯光控制 # 先切换界面,再切回灯光控制
air_button = app_drive.find_element(AppiumBy.XPATH, 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]") "/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("尝试定位【空气净化】按钮元素,并点击按钮") logging.info("尝试定位【空气净化】按钮元素,并点击按钮")
air_button.click() self.click_with_retry(air_button)
sleep(10) sleep(10)
# STEP(2, "检查灯光控制功能") STEP(2, "检查灯光控制功能")
# # 这是灯光开启前的截图 # 这是灯光开启前的截图
# INFO("请检查灯光开启前的监控视频状态是否正常") INFO("请检查灯光开启前的监控视频状态是否正常")
# SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_down") 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流地址 light_rtsp_url = "rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2" # 替换为你的RTSP流地址
# logging.info("开始捕获RTSP流中的帧") logging.info("开始捕获RTSP流中的帧")
# if capture_frame_from_rtsp(light_rtsp_url, "light_down.png"): if capture_frame_from_rtsp(light_rtsp_url, "light_down.png"):
# logging.info("帧捕获成功") logging.info("帧捕获成功")
# else: else:
# logging.error("帧捕获失败") logging.error("帧捕获失败")
#
# # 定位灯光控制按钮元素,并点击按钮 # 定位灯光控制按钮元素,并点击按钮
# logging.info("尝试定位【灯光控制】按钮元素,并点击按钮") logging.info("尝试定位【灯光控制】按钮元素,并点击按钮")
# light_button = app_drive.find_element(AppiumBy.XPATH, 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]") "/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("定位成功") logging.info("定位成功")
# # 点击【灯光控制】按钮 # 点击【灯光控制】按钮
# light_button.click() self.click_with_retry(light_button)
# logging.info("点击【灯光控制】按钮成功") sleep(10)
# sleep(10)
# # 这是全部灯光关闭后在软件界面上的状态显示
# # 这是全部灯光关闭后在软件界面上的状态显示 INFO("请检查中控屏软件的灯光关闭状态显示是否正常")
# INFO("请检查中控屏软件的灯光关闭状态显示是否正常") SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_all_off")
# SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_all_off")
# # 截图获取当前软件的灯光控制界面
# # 截图获取当前软件的灯光控制界面 self.get_screenshot_with_retry(app_drive,
# app_drive.get_screenshot_as_file( r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_off.png")
# r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_off.png") # 调用灯光控制函数
# # 调用灯光控制函数 light_control(app_drive)
# light_control(app_drive)
# # 这是全部灯光开启后在软件界面上的状态显示
# # 这是全部灯光开启后在软件界面上的状态显示 INFO("请检查中控屏软件的灯光开启状态显示是否正常")
# INFO("请检查中控屏软件的灯光开启状态显示是否正常") SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_all_on")
# SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_all_on")
# # 截图获取当前软件的灯光控制界面
# # 截图获取当前软件的灯光控制界面 self.get_screenshot_with_retry(app_drive,
# app_drive.get_screenshot_as_file( r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_on.png")
# r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_on.png")
# # 这是灯光开启后的截图
# # 这是灯光开启后的截图 INFO("请检查灯光开启后的监控视频状态是否正常")
# INFO("请检查灯光开启后的监控视频状态是否正常") SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Control_Manage", "light_on")
# 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流地址
# light_rtsp_url = "rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2" # 替换为你的RTSP流地址 logging.info("开始捕获RTSP流中的帧")
# logging.info("开始捕获RTSP流中的帧") if capture_frame_from_rtsp(light_rtsp_url, "light_on.png"):
# if capture_frame_from_rtsp(light_rtsp_url, "light_on.png"): logging.info("帧捕获成功")
# logging.info("帧捕获成功") else:
# else: logging.error("帧捕获失败")
# logging.error("帧捕获失败")
# # 切换灯光控制界面
# # 切换灯光控制界面 # 灯光测试结束后关闭灯光
# # 灯光测试结束后关闭灯光 logging.info("尝试定位【灯光控制】按钮元素,并点击按钮")
# logging.info("尝试定位【灯光控制】按钮元素,并点击按钮") light_button = self.find_element_with_retry(app_drive, AppiumBy.XPATH,
# 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]")
# "/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("定位成功")
# logging.info("定位成功") # 点击【灯光控制】按钮
# # 点击【灯光控制】按钮 self.click_with_retry(light_button)
# light_button.click() sleep(10)
# sleep(10) light_control(app_drive)
# light_control(app_drive)
# STEP(3, "检查窗帘的升降功能")
# STEP(3, "检查窗帘的升降功能") # 切换至窗帘控制界面
# # 切换至窗帘控制界面 logging.info("尝试定位【窗帘控制】按钮元素,并点击按钮")
# logging.info("尝试定位【窗帘控制】按钮元素,并点击按钮") curtain_button = self.find_element_with_retry(app_drive, AppiumBy.XPATH,
# 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]")
# "/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)
# curtain_button.click() sleep(10)
# sleep(2) # 调用窗口上升下降的函数
# # 调用窗口上升下降的函数 curtain_control(app_drive, wd)
# curtain_control(app_drive,wd)
# STEP(3, "检查空调控制是否正常")
# STEP(3, "检查空调控制是否正常") # 切换至空调控制界面
# # 切换至空调控制界面 logging.info("尝试定位【空调控制】按钮元素,并点击按钮")
# logging.info("尝试定位【空调控制】按钮元素,并点击按钮") air_conditioner_button = self.find_element_with_retry(app_drive, AppiumBy.XPATH,
# 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]")
# "/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)
# air_conditioner_button.click() sleep(10)
# sleep(2) # 调用空调控制的函数
# # 调用空调控制的函数 air_condition_control(app_drive, wd)
# air_condition_control(app_drive,wd)
# STEP(4, "检查指挥大屏控制是否正常")
# STEP(4, "检查指挥大屏控制是否正常") # 切换至指挥中心控制界面
# # 切换至指挥中心控制界面 # 打开指挥中心大屏幕
# # 打开指挥中心大屏幕 logging.info("尝试定位【开启指挥中心控制】按钮元素,并点击按钮")
# logging.info("尝试定位【开启指挥中心控制】按钮元素,并点击按钮") center_button = self.find_element_with_retry(app_drive, AppiumBy.XPATH,
# 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]")
# "/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)
# center_button.click() sleep(10)
# sleep(2) # 调用指挥中心控制函数
# # 调用指挥中心控制函数 command_centre_control(light_rtsp_url, app_drive, wd)
# command_centre_control(light_rtsp_url, app_drive,wd)
# STEP(5, "检查音乐控制功能是否正常")
# STEP(5, "检查音乐控制功能是否正常") # 切换至音乐区域
# # 切换至音乐区域 logging.info("尝试定位【音乐】按钮元素,并点击按钮")
# logging.info("尝试定位【音乐】按钮元素,并点击按钮") music_button = self.find_element_with_retry(app_drive, AppiumBy.XPATH,
# 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]")
# "/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)
# music_button.click() sleep(2)
# sleep(2) # 调用音乐控制函数
# # 调用音乐控制函数 music_control(app_drive, wd)
# music_control(app_drive,wd) sleep(10)
sleep(5)
STEP(6, "检查信息发布界面发布内容功能是否正常") STEP(6, "检查信息发布界面发布内容功能是否正常")
logging.info("尝试定位【发布屏】按钮元素,并点击按钮") logging.info("尝试定位【发布屏】按钮元素,并点击按钮")
information_delivery = app_drive.find_element(AppiumBy.XPATH, 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]") "/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("定位成功") logging.info("定位成功")
information_delivery.click() self.click_with_retry(information_delivery)
sleep(5) sleep(5)
# 打开信息发布播放 # 打开信息发布播放
information_on_button = app_drive.find_element(AppiumBy.XPATH, 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]") "/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("定位“发布屏”开启按钮") logging.info("定位“发布屏”开启按钮")
information_on_button.click() self.click_with_retry(information_on_button)
sleep(5) sleep(5)
logging.info("信息发布播放开启成功") logging.info("信息发布播放开启成功")
# 调用信息发布控制函数 # 调用信息发布控制函数
information_control(app_drive,wd) information_control(app_drive, wd)
except Exception as e: except Exception as e:
# 捕获并记录任何发生的错误 # 捕获并记录任何发生的错误
logging.error(f"发生错误: {e}", exc_info=True) logging.error(f"发生错误: {e}", exc_info=True)
\ No newline at end of file
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论