提交 292512bb authored 作者: 陈泽健's avatar 陈泽健

封装三个移动端的函数,分别用于设备控制时的异常重试机制以及设备截屏操作,增加相应的异常处理。

上级 498c8ae1
......@@ -414,8 +414,7 @@ def curtain_control(app_drive,wd):
INFO("请检查窗帘上升状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_up")
# 截图获取当前中控屏软件窗帘上升的界面
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\curtain_up.png")
get_screenshot_with_retry(app_drive, "Control_Manage", "curtain_up")
sleep(30)
# # 测试报告中补充窗帘上升的截图
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_rtsp_up")
......@@ -440,8 +439,7 @@ def curtain_control(app_drive,wd):
INFO("请检查窗帘下降状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_down")
# 截图获取当前中控屏软件窗帘上升的界面
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\curtain_down.png")
get_screenshot_with_retry(app_drive, "Control_Manage", "curtain_down")
# 测试报告中补充窗帘下降的截图
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_rtsp_down")
logging.info("开始捕获RTSP流中的帧")
......@@ -462,8 +460,7 @@ def air_condition_control(app_drive,wd):
INFO("请检查空调开启的状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "air_condition_on")
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\air_condition_on.png")
get_screenshot_with_retry(app_drive, "Control_Manage", "air_condition_on")
sleep(2)
# 点击【关闭空调】按钮
......@@ -475,8 +472,7 @@ def air_condition_control(app_drive,wd):
# 这是空调关闭的状态显示
INFO("请检查空调关闭的状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "air_condition_off")
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\air_condition_off.png")
get_screenshot_with_retry(app_drive, "Control_Manage", "air_condition_off")
sleep(2)
def information_control(app_drive,wd):
......@@ -557,8 +553,7 @@ def music_control(app_drive,wd):
# 这是音乐开启播放后的界面显示
INFO("请检查中控屏软件打开音乐播放后的界面状态显示")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "music_on")
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\music_on.png")
get_screenshot_with_retry(app_drive, "Control_Manage", "music_on")
# 点击【关闭播放音乐】
logging.info("尝试定位【关闭播放音乐】按钮元素,并点击按钮")
......@@ -569,9 +564,7 @@ def music_control(app_drive,wd):
# 这是音乐关闭播放后的界面显示
INFO("请检查中控屏软件关闭音乐播放后的界面状态显示")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "music_off")
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\music_off.png")
get_screenshot_with_retry(app_drive, "Control_Manage", "music_off")
def command_centre_control(rtsp_url,app_drive,wd):
open_center_button = app_drive.find_element(AppiumBy.XPATH,
......@@ -715,4 +708,105 @@ def app_quit(device_ip,port=5555):
# 断开特定 IP 和端口的 ADB 连接
device_address = f"{device_ip}:{port}"
subprocess.run(['adb', 'disconnect', device_address])
INFO(f"ADB 连接已断开: {device_address}")
\ No newline at end of file
INFO(f"ADB 连接已断开: {device_address}")
def get_screenshot_with_retry(app_drive, module_name, function_name, max_retries=3, retry_delay=5):
"""
使用重试机制获取并保存截图。
参数:
app_drive: 实现了get_screenshot_as_file方法的对象,用于获取截图。
module_name: 用于构造保存截图的目录名称。
function_name: 用于构造截图文件的名称。
max_retries: 最大重试次数,默认为3次。
retry_delay: 重试间隔时间,默认为5秒。
返回值:
无。如果多次尝试截图失败,则抛出异常。
"""
# 获取当前文件的绝对路径
current_file_path = os.path.abspath(__file__)
# 获取当前文件的父级目录
parent_dir = os.path.dirname(current_file_path)
# 构造目标目录路径
target_dir = os.path.join(parent_dir, '..', 'reports', 'imgs', 'Exhibit_Inspect', module_name)
# 确保目标目录存在,如果不存在则创建
os.makedirs(target_dir, exist_ok=True)
# 构造文件路径
file_path = os.path.join(target_dir, f"{function_name}.png")
# 使用循环实现重试机制
for _ in range(max_retries):
try:
# 尝试保存截图
app_drive.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 find_element_with_retry(driver, by, value, max_retries=3, retry_delay=5):
"""
使用重试机制查找元素。
在WebDriver(driver)中通过给定的查找方式(by)和值(value)来查找页面元素。
如果在指定的最大重试次数(max_retries)内仍然找不到元素,则抛出异常。
每次重试之间会有指定的延迟时间(retry_delay)。
参数:
- driver: WebDriver实例,用于执行查找操作。
- by: 查找元素的方式,如XPath、ID等。
- value: 元素的值,根据'by'参数指定的查找方式对应的具体值。
- 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 click_with_retry(element, max_retries=3, retry_delay=5):
"""
点击元素的函数,带有重试机制。
参数:
element (obj): 要点击的元素对象。
max_retries (int): 最大重试次数,默认为3次。
retry_delay (int): 每次重试之间的延迟时间,默认为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}")
......@@ -224,4 +224,5 @@
- 讯飞系统的定位元素改为CSS,因国际化导致原先的XPATH可能会由变化。
58. 2025-02-22
- 排查展厅巡检报告中无纸化会议操作的截图显示错误问题,补充上一无纸化同屏流程的结束同屏操作步骤。在初始化函数补充adb连接是否可用的判断,如连接失败,则不进行后续操作。
- 处理展厅巡检中控屏的信息发布屏流程步骤缺失问题,增加异常重试机制。
\ No newline at end of file
- 处理展厅巡检中控屏的信息发布屏流程步骤缺失问题,增加异常重试机制。
- 封装三个移动端的函数,分别用于设备控制时的异常重试机制以及设备截屏操作,增加相应的异常处理。
\ No newline at end of file
......@@ -3,5 +3,5 @@ trust_host_root_certs: false
tunnels:
nat1:
proto:
tcp: 192.168.2.192:80
tcp: 192.168.1.203:80
remote_port: 31133
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论