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

排查展厅巡检报告中无纸化会议操作的截图显示错误问题,补充上一无纸化同屏流程的结束同屏操作步骤。在初始化函数补充adb连接是否可用的判断,如连接失败,则不进行后续操作。

上级 58334bc6
# my_globals.py
# 初始化全局变量
my_global_var = None
\ No newline at end of file
......@@ -219,6 +219,8 @@
- 补充了自动获取本机IP地址以及自动运行ngrok开启映射,避免后续IP改变后无法打开报告问题。
- 补充开启ngrok进程之前先关闭已运行的进程,然后再启动ngrok映射.规避因多个ngrok共存出现的问题.
57. 2025-02-19
- 根据展厅巡检报告处理展厅中控屏步骤缺失问题,是由元素定位值发生变化导致无法定位成功。
- 根据展厅巡检报告处理展厅中控屏步骤缺失问题,是由元素定位值发生变化导致无法定位成功。但是多运行几次发现有时候adb连接会自动断开或者程序会自动闪退。
- 补充图片对比函数,还需调整一下判断的图像点阈值。
- 讯飞系统的定位元素改为CSS,因国际化导致原先的XPATH可能会由变化。
\ No newline at end of file
- 讯飞系统的定位元素改为CSS,因国际化导致原先的XPATH可能会由变化。
58. 2025-02-22
- 排查展厅巡检报告中无纸化会议操作的截图显示错误问题,补充上一无纸化同屏流程的结束同屏操作步骤。在初始化函数补充adb连接是否可用的判断,如连接失败,则不进行后续操作。
\ No newline at end of file
from 预定系统.Base.app_base import *
import logging
import time
class same_screen_share_001:
class same_screen_share_000x:
"""
执行指令:
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):
wd = GSTORE['wd']
......@@ -22,31 +23,32 @@ class same_screen_share_001:
# 初始化第二个设备
app_drive2 = app_setup_driver("Android", "7.1.2", "展厅无纸化设备1.0", "com.ubains.system.develop.mqtt", "com.ubains.system.activity.RouterActivity","192.168.5.157:5555")
app_drive2.implicitly_wait(20) # 设置缺省等待时间
# 使用显式等待来等待元素出现
logging.info(f"等待登录页加载.")
sleep(10)
# 进入后台设置界面
logging.info(f"尝试进入后台设置")
back_setting_button = app_drive1.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.LinearLayout[1]/android.widget.RelativeLayout[3]/android.widget.TextView')
back_setting_button = self.find_element_with_retry(app_drive1, 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.LinearLayout[1]/android.widget.RelativeLayout[3]')
back_setting_button.click()
sleep(5)
setting_button = app_drive1.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[2]')
setting_button = self.find_element_with_retry(app_drive1, AppiumBy.XPATH,
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]')
setting_button.click()
sleep(5)
# 输入管理员密码点击【确定】按钮
logging.info(f"尝试输入管理员密码点击【确定】")
admin_pwd_input = app_drive1.find_element(AppiumBy.XPATH,
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/androidx.appcompat.widget.LinearLayoutCompat/android.widget.EditText')
admin_pwd_input = self.find_element_with_retry(app_drive1, AppiumBy.XPATH,
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/androidx.appcompat.widget.LinearLayoutCompat/android.widget.EditText')
admin_pwd_input.send_keys("000000")
sleep(3)
# 点击确定按钮
confirm_button = app_drive1.find_element(AppiumBy.XPATH,
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.view.ViewGroup/android.widget.Button[2]')
confirm_button = self.find_element_with_retry(app_drive1, AppiumBy.XPATH,
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.view.ViewGroup/android.widget.Button[2]')
confirm_button.click()
sleep(5)
......@@ -58,29 +60,29 @@ class same_screen_share_001:
# 进入【同屏和视频服务】界面
logging.info(f"进入【同屏和视频服务】")
same_screen_module = app_drive1.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.LinearLayout/android.widget.RelativeLayout[5]/android.widget.TextView')
same_screen_module = self.find_element_with_retry(app_drive1, AppiumBy.XPATH,
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout[5]/android.widget.TextView')
same_screen_module.click()
sleep(2)
# 点击右上角【开始】按钮
same_screen_button = app_drive1.find_element(AppiumBy.XPATH,
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.widget.FrameLayout/android.view.ViewGroup/android.widget.Button[1]')
same_screen_button = self.find_element_with_retry(app_drive1, AppiumBy.XPATH,
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.widget.FrameLayout/android.view.ViewGroup/android.widget.Button[1]')
same_screen_button.click()
sleep(3)
# 截取设备A和设备B的同屏画面截屏
INFO(f"这是设备A开启同屏共享的界面")
INFO(f"这是设备A同屏共享的界面")
SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "No_PaperLess", "同屏后-无纸化设备A界面截屏")
app_drive1.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\No_PaperLess\同屏后-无纸化设备A界面截屏.png")
INFO(f"这是设备B开启同屏共享的界面")
INFO(f"这是设备B同屏共享的界面")
SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "No_PaperLess", "同屏后-无纸化设备B界面截屏")
app_drive2.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\No_PaperLess\同屏后-无纸化设备B界面截屏.png")
# # 调用图片对比函数判断相似度
# 调用图片对比函数判断相似度
# image1_path = r"/预定系统/reports/imgs/Exhibit_Inspect/No_PaperLess/同屏后-无纸化设备A界面截屏.png"
# image2_path = r"/预定系统/reports/imgs/Exhibit_Inspect/No_PaperLess/同屏后-无纸化设备B界面截屏.png"
#
......@@ -100,5 +102,31 @@ class same_screen_share_001:
# # 输出相似度
# INFO("相似度为:" + "%.2f%%" % (result1 * 100))
sleep(1)
# 退出同屏操作
share_quit_button = self.find_element_with_retry(app_drive1, AppiumBy.XPATH,
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.widget.FrameLayout/android.view.ViewGroup/android.widget.Button[2]')
INFO("执行退出同屏操作")
share_quit_button.click()
# 退出同屏后截屏操作
INFO(f"这是设备A关闭同屏共享的界面")
SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "No_PaperLess", "取消同屏-无纸化设备A界面截屏")
app_drive1.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\No_PaperLess\取消同屏-无纸化设备A界面截屏.png")
INFO(f"这是设备B关闭同屏共享的界面")
SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "No_PaperLess", "取消同屏-无纸化设备B界面截屏")
app_drive2.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\No_PaperLess\取消同屏-无纸化设备B界面截屏.png")
sleep(10)
except Exception as e:
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"Failed to find element")
\ No newline at end of file
......@@ -11,9 +11,9 @@ class Exhibition_hall_NoPaperinspection_000x:
"""
执行指令:
1.cd 预定系统
2.hytest --report_title 会议预约测试报告 --report_url_prefix http://192.168.1.225 --tag 无纸化
2.hytest --report_title 无纸化会议操作测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 无纸化
"""
tags = ['展厅巡检','无纸化']
tags = ['展厅巡检','无纸化测试']
def teststeps(self):
app_drive = None
......@@ -97,28 +97,5 @@ class Exhibition_hall_NoPaperinspection_000x:
# swipe_up(app_drive)
sleep(2)
# # 尝试点击左侧的侧边栏
# sidebar_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.LinearLayout[2]/android.widget.RelativeLayout/android.widget.TextView")
# sidebar_button.click()
# sleep(2)
#
# # 尝试定位同屏按钮
# same_screen = app_drive.find_element(AppiumBy.XPATH,
# "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout[1]/android.widget.LinearLayout[6]/android.widget.ImageView")
# same_screen.click()
# sleep(2)
#
# # 尝试点位【发起同屏】按钮
# initiate_same_screen = app_drive.find_element(AppiumBy.XPATH,
# "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.Button[1]")
# initiate_same_screen.click()
# sleep(2)
except Exception as e:
logging.error(f"发生错误: {e}", exc_info=True)
# finally:
# if app_drive:
# app_drive.quit()
# logging.info("驱动程序已退出。")
\ No newline at end of file
logging.error(f"发生错误: {e}", exc_info=True)
\ No newline at end of file
......@@ -21,20 +21,25 @@ except ModuleNotFoundError as e:
def suite_setup():
STEP(1, "初始化设备1的adb连接")
device_ip1 = '192.168.5.156'
app_init(device_ip1)
# app_init(device_ip1)
CHECK_POINT("设备1的adb连接初始化检测", app_init(device_ip1) == True)
STEP(2, "初始化设备2的adb连接")
device_ip2 = '192.168.5.157' # 假设第二个设备的IP地址是192.168.5.157
app_init(device_ip2)
# app_init(device_ip2)
CHECK_POINT("设备2的adb连接初始化检测", app_init(device_ip2) == True)
STEP(3, "初始化设备3的adb连接")
device_ip3 = '192.168.5.158'
app_init(device_ip3)
# app_init(device_ip3)
CHECK_POINT("设备3的adb连接初始化检测", app_init(device_ip3) == True)
browser_init("展厅预定巡检")
wd = GSTORE['wd']
def suite_teardown():
device_ip1 = '192.168.5.156'
app_quit(device_ip1)
......
from 预定系统.Base.app_base import *
import logging
from time import sleep
from hytest import *
# 配置日志记录
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
class Exhibition_hall_Control_000x:
"""
执行指令:
1.cd 预定系统
2.hytest --report_title 会议预约测试报告 --report_url_prefix http://nat.ubainsyun.com:13233 --tag 展厅中控屏
"""
tags = ['展厅中控屏测试','展厅巡检']
def teststeps(self):
"""
执行测试步骤以自动化测试腾讯会议应用的登录和会议加入流程。
该方法初始化应用驱动,等待应用加载,定位并点击会议按钮,加入会议,并截取会议画面。
"""
app_drive = None
wd = GSTORE['wd']
try:
# 初始化应用驱动,连接到指定的设备和应用
app_drive = app_setup_driver("Android", "5.1.1", "UT-13", "com.ubains.gviewer",
".SplashActivity", "192.168.5.112:5555")
app_drive.implicitly_wait(60) # 设置缺省等待时间
# 使用显式等待来等待元素出现
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]")
logging.info("尝试定位【空气净化】按钮元素,并点击按钮")
air_button.click()
sleep(10)
STEP(1, "关闭展厅环境灯光。")
# 切换灯光控制界面
# 所有测试结束后关闭灯光
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)
except Exception as e:
# 捕获并记录任何发生的错误
logging.error(f"发生错误: {e}", exc_info=True)
\ No newline at end of file
# import pandas as pd
# import json
# from time import sleep
# import sys
# import os
#
# # 获取当前脚本的绝对路径
# current_dir = os.path.dirname(os.path.abspath(__file__))
# # 构建预定系统的绝对路径
# 预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..'))
# # 添加路径
# sys.path.append(预定系统_path)
# # 导入模块
# try:
# from 预定系统.Base.base import *
# except ModuleNotFoundError as e:
# print(f"ModuleNotFoundError: {e}")
# print("尝试使用绝对路径导入")
# from 预定系统.Base.base import *
#
# def Get_JSON():
# DEFAULT_WAIT_TIME = 20
# # 默认等待时间(秒),用于元素加载或操作之间的等待
#
# # 获取当前脚本所在的目录
# current_dir = os.path.dirname(os.path.abspath(__file__))
#
# # 构建Excel文件的绝对路径
# xlsx_file_path = os.path.join(current_dir, '../../测试数据/登录模块/新账号密码登录.xlsx')
#
# # 读取Excel文件,从第四行开始(索引为3),并提取第11列(索引为10)的JSON数据,确保内容为字符串
# df = pd.read_excel(xlsx_file_path, sheet_name='Sheet1', skiprows=3, usecols=[10], dtype=str)
#
# # 打印 DataFrame 查看数据
# print("DataFrame:")
# print(df)
#
# # 将DataFrame转换为字典列表,并处理空值
# ddt_cases = []
# for index, row in df.iterrows():
# json_str = row.iloc[0]
# if pd.notna(json_str):
# # 清理 JSON 字符串,去除多余的换行符和空格
# cleaned_json_str = json_str.replace('\n', '').replace(' ', '')
# try:
# parsed_json = json.loads(cleaned_json_str)
# ddt_cases.append(parsed_json)
# except json.JSONDecodeError as e:
# print(f"Error parsing JSON at row {index}: {e}")
# ddt_cases.append({})
# else:
# ddt_cases.append({})
#
# # 打印解析后的 JSON 数据
# print("Parsed JSON Data:")
# print(ddt_cases)
#
# if __name__ == '__main__':
# Get_JSON()
......@@ -3,5 +3,5 @@ trust_host_root_certs: false
tunnels:
nat1:
proto:
tcp: 192.168.1.135:80
tcp: 192.168.2.192:80
remote_port: 31133
......@@ -84,7 +84,7 @@ start_workers(3)
# start_ngrok(ngrok_path, ngrok_config_path)
# 定时执行展厅巡检任务
schedule.every().day.at("16:47").do(run_task, run_automation_test, report_title="展厅巡检测试调试报告", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="展厅巡检", ding_type="展厅巡检")
schedule.every().day.at("07:45").do(run_task, run_automation_test, report_title="展厅巡检测试报告", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="展厅巡检", ding_type="展厅巡检")
# 调试使用
# schedule.every().day.at("08:44").do(run_task, run_automation_test, report_title="展厅调试", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="腾讯会议", ding_type="展厅巡检")
......
name,conference_name,message_name,book_type,issue_name,book_start_time,book_end_time,message_notification,check_text
展厅巡检_001,MeetingRoom,展厅巡检测试,普通会议,议题1,17:00,17:15,开会前一天提醒,预定成功
\ No newline at end of file
展厅巡检_001,MeetingRoom,展厅巡检测试,普通会议,议题1,08:00,08:15,开会前一天提醒,预定成功
\ No newline at end of file
会议预定-用户注册登录测试用例,,,,,,,,,,,,,,,
"验证方向:
1、注册功能(缺少待补充)
2,登录功功能
3,密码找回功能",,,,,,,,,,,,,,,
序列号,功能模块,功能类别,用例编号,功能描述,用例等级,对应功能编号,用例名称,预置条件,操作步骤,JSON,预期结果,测试结果,测试频次,日志/截图/照片,备注
YD0001,登录模块,标准版,DL0001,支持用户输入账号密码登录,1,HYYD001,登录功能测试,预定系统正常运行,页面显示正常,"1.输入正确的账号或手机号、邮箱号;输入正确的密码;输入正确的认证码;点击登录
2.输入错误的账号或手机号、邮箱号;输入正确的密码;输入正确的认证码;点击登录
3.输入正确的账号或手机号、邮箱号;输入错误的密码;输入正确的认证码;点击登录
4.输入正确的账号或手机号、邮箱号;输入正确的密码;输入错误的认证码;点击登录",,"1.账号进行权限判断登录成功进入该帐号权限的页面
2.提示帐号或密码输入错误
3.提示帐号或密码输入错误
4.提示验证码输入错误",,,,
YD0002,登录模块,标准版,DL0002,支持短信找回密码,2,HYYD002,短信找回功能测试,预定系统正常运行,页面显示正常,"1.输入符合格式的手机号码;滑动验证条;点击发送验证码;输入正确的验证码;输入符合格式的密码;输入跟创建密码一样的密码;勾选阅读并同意《用户协议》;点击保存按钮
2.输入不符合格式的手机号码;滑动验证条;点击发送验证码;输入正确的验证码;输入符合格式的密码;输入跟创建密码一样的密码;勾选阅读并同意《用户协议》;点击保存按钮
3.输入符合格式的手机号码;滑动验证条;点击发送验证码;输入错误的验证码;输入符合格式的密码;输入跟创建密码一样的密码;勾选阅读并同意《用户协议》;点击保存按钮
4.输入符合格式的手机号码;滑动验证条;点击发送验证码;输入正确的验证码;输入不符合格式的密码;输入跟创建密码一样的密码;勾选阅读并同意《用户协议》;点击保存按钮
5.输入符合格式的手机号码;滑动验证条;点击发送验证码;输入正确的验证码;输入符合格式的密码;输入跟创建密码不相同的密码;勾选阅读并同意《用户协议》;点击保存按钮
6.输入符合格式的手机号码;滑动验证条;点击发送验证码;输入正确的验证码;输入符合格式的密码;输入跟创建密码一样的密码;不勾选阅读并同意《用户协议》;点击保存按钮",,"1.提示修改成功
2.提示请输入正确的手机号
3.提示请输入正确的验证码
4.提示密码格式错误
5.提示两次密码输入不一致,请重新输入
6.提示阅读并同意《用户协议》 ",,,,
YD0003,登录模块,标准版,YDYL0003,支持邮箱找回密码,2,HYYD003,邮箱找回功能测试,预定系统正常运行,页面显示正常,"1.输入符合格式的邮箱账号;滑动验证条;点击发送验证码;输入正确的验证码;输入符合格式的密码;输入跟创建密码一样的密码;勾选阅读并同意《用户协议》;点击注册按钮
2.输入不符合格式的邮箱账号;滑动验证条;点击发送验证码;输入正确的验证码;输入符合格式的密码;输入跟创建密码一样的密码;勾选阅读并同意《用户协议》;点击注册按钮
3.输入符合格式的邮箱账号;滑动验证条;点击发送验证码;输入错误的验证码;输入符合格式的密码;输入跟创建密码一样的密码;勾选阅读并同意《用户协议》;点击注册按钮
4.输入符合格式的邮箱账号;滑动验证条;点击发送验证码;输入正确的验证码;输入不符合格式的密码;输入跟创建密码一样的密码;勾选阅读并同意《用户协议》;点击注册按钮
5.输入符合格式的邮箱账号;滑动验证条;点击发送验证码;输入正确的验证码;输入符合格式的密码;输入跟创建密码不相同的密码;勾选阅读并同意《用户协议》;点击注册按钮
6.输入符合格式的邮箱账号;滑动验证条;点击发送验证码;输入正确的验证码;输入符合格式的密码;输入跟创建密码一样的密码;不勾选阅读并同意《用户协议》;点击注册按钮",,"1.提示修改成功
2.提示请输入正确的手机号
3.提示请输入正确的验证码
4.提示密码格式错误
5.提示两次密码输入不一致,请重新输入
6.提示阅读并同意《用户协议》 ",,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论