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

使用ANDROID_UIAUTOMATOR类型进行定位元素还有问题,需要再进行调试。

上级 9e4653ac
...@@ -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 枚举类型。 将字符串类型的定位器类型转换为 AppiumBy 枚举类型。
参数: 参数:
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):
......
...@@ -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
...@@ -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.128' device_ip1 = '192.168.1.157'
CHECK_POINT("设备1的adb连接初始化检测", app_init(device_ip1) == True) CHECK_POINT("设备1的adb连接初始化检测", app_init(device_ip1) == True)
browser_init("展厅预定巡检") browser_init("展厅预定巡检")
......
...@@ -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.128:5555") "com.ubains.ub.gview.SplashActivity", "192.168.1.157:5555")
app_drive.implicitly_wait(60) # 设置缺省等待时间 sleep(50) # 设置缺省等待时间
# 使用显式等待来等待元素出现 # 使用显式等待来等待元素出现
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":
......
...@@ -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.128' device_ip1 = '192.168.1.157'
CHECK_POINT("设备1的adb连接初始化检测", app_init(device_ip1) == True) CHECK_POINT("设备1的adb连接初始化检测", app_init(device_ip1) == True)
browser_init("展厅预定巡检") browser_init("展厅预定巡检")
......
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
<!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/04/14 18:14:41</td> <td>2025/05/06 18:36:31</td>
</tr> </tr>
<tr> <tr>
<td>结束时间</td> <td>结束时间</td>
<td>2025/04/14 18:14:48</td> <td>2025/05/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: 100.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: 100.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-04-14 18:14:41</span> <span class="executetime">2025-05-06 18:36:31</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-04-14 18:14:43</span> <span class="executetime">2025-05-06 18:36:33</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 &quot;D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py&quot;, line 71, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File &quot;D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py&quot;, line 968, in input_text_with_retry
raise Exception(f&quot;多次尝试输入文本失败: {by}={value}&quot;)
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-04-14 18:14:45</span> <span class="executetime">2025-05-06 18:37:25</span>
</div> </div>
<div class="folder_body"> <div class="folder_body">
<div class="info">ADB 连接已断开: 192.168.5.112: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(&quot;body&quot;).scrollIntoView()">页首</div> <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div> <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</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>
......
<!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/04/14 18:15:13</td> <td>2025/05/06 18:38:51</td>
</tr> </tr>
<tr> <tr>
<td>结束时间</td> <td>结束时间</td>
<td>2025/04/14 18:15:21</td> <td>2025/05/06 18:39:46</td>
</tr> </tr>
<tr> <tr>
<td>耗时</td> <td>耗时</td>
<td>7.758 秒</td> <td>55.768 秒</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: 100.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: 100.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-04-14 18:15:13</span> <span class="executetime">2025-05-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.160:5555</div> <div class="info">尝试连接到设备: 192.168.1.128:5555</div>
<div class="info">设备 192.168.1.160: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-04-14 18:15:15</span> <span class="executetime">2025-05-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 &quot;D:\GithubData\自动化\ubains-module-test\预定配套件\中控门口屏\cases\01门口屏首次安装部署\安装部署流程.py&quot;, line 71, in teststeps
input_text_with_retry(app_drive,locator_type, locator_value,element_value)
File &quot;D:\GithubData\自动化\ubains-module-test\预定配套件\Base\app_base.py&quot;, line 968, in input_text_with_retry
raise Exception(f&quot;多次尝试输入文本失败: {by}={value}&quot;)
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-04-14 18:15:17</span> <span class="executetime">2025-05-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(&quot;body&quot;).scrollIntoView()">页首</div> <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div> <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</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>
......
...@@ -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_174611 ========= ========= 测试开始 : 20250506_190851 =========
...@@ -113,8 +140,8 @@ XLSX文件已读取 ...@@ -113,8 +140,8 @@ XLSX文件已读取
-- 第 1 步 -- 初始化设备1的adb连接 -- 第 1 步 -- 初始化设备1的adb连接
'----------' 正在初始化ADB连接 '----------' '----------' 正在初始化ADB连接 '----------'
尝试连接到设备: 192.168.1.128:5555 尝试连接到设备: 192.168.1.157:5555
设备 192.168.1.128:5555 已连接并可用 设备 192.168.1.157:5555 已连接并可用
** 检查点 ** 设备1的adb连接初始化检测 ----> 通过 ** 检查点 ** 设备1的adb连接初始化检测 ----> 通过
...@@ -124,7 +151,43 @@ XLSX文件已读取 ...@@ -124,7 +151,43 @@ XLSX文件已读取
>>> cases\01门口屏首次安装部署\安装部署流程.py >>> cases\01门口屏首次安装部署\安装部署流程.py
* 首次安装部署功能 - 2025-05-06 17:46:13 * 首次安装部署功能 - 2025-05-06 19:08:53
[ 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
...@@ -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_174427 ========= ========= 测试开始 : 20250506_190829 =========
...@@ -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
...@@ -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_174239 ========= ========= 测试开始 : 20250506_190757 =========
...@@ -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
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论