提交 c38ef627 authored 作者: 彭甘宇's avatar 彭甘宇

x新增统一平台相关代码,初步实现几个流程功能。

上级 d38c629b
此差异已折叠。
# 浏览器初始化函数
def browser_init(login_type):
"""
初始化浏览器设置和实例。
此函数旨在创建并配置一个Chrome浏览器实例,包括设置Chrome选项以排除不必要的日志,
并尝试打开特定的登录页面。任何初始化过程中出现的错误都会被捕获并记录。
参数:
login_type (str): 指定登录类型,根据不同的登录类型选择不同的URL。
返回:
"""
# 标记初始化过程的开始
INFO("'----------' 正在初始化浏览器 '----------'")
# 创建Chrome选项实例,用于配置浏览器行为
options = webdriver.ChromeOptions()
# 添加实验性选项,排除某些命令行开关以减少输出日志
options.add_experimental_option('excludeSwitches', ['enable-Logging'])
# 忽略证书错误,允许在本地主机上运行时不安全
options.add_argument('--ignore-certificate-errors')
# 禁用自动化控制特征检测,避免被网站识别为自动化流量
options.add_argument('--disable-blink-features=AutomationControlled')
# 允许不安全的本地主机运行,通常用于开发和测试环境
options.add_argument('--allow-insecure-localhost')
# 使用webdriver_manager自动下载并管理chromedriver
# service = ChromeService(ChromeDriverManager().install())
# 使用备用的ChromeDriver下载源
# service = Service(ChromeDriverManager().install())
# 手动指定ChromeDriver的路径
# 自动化运行服务器的chromedriver路径:
service = Service(r'C:\Users\29194\AppData\Local\Programs\Python\Python310\Scripts\chromedriver.exe')
# service = Service(r'C:\Program Files\Python310\Scripts\chromedriver.exe')
# 尝试创建WebDriver实例并执行初始化操作
try:
# 创建WebDriver实例
wd = webdriver.Chrome(service=service, options=options)
# 设置隐式等待时间为10秒,以允许元素加载
wd.implicitly_wait(60)
# 获取登录URL
login_url = get_login_url_from_config(login_type)
# 打开对应类型的登录页面
wd.get(login_url)
# 最大化浏览器窗口
wd.maximize_window()
# 将WebDriver实例存储在全局存储器中,以便后续使用
GSTORE['wd'] = wd
# 标记初始化过程完成
INFO("'----------' 浏览器初始化完成 '----------'")
except Exception as e:
# 捕获并记录初始化过程中的任何异常
logging.error(f"浏览器初始化失败:{e}")
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建统一平台的绝对路径
platform_path = os.path.abspath(os.path.join(current_dir, '..','..','..'))
# 添加路径
sys.path.append(platform_path)
# 导入模块
from 统一平台.base.bases import *
class Unified_Platform_0001:
tags = ['统一平台','创建-本地会议-立即开始']
def teststeps(self):
wd = GSTORE['wd']
safe_click((By.XPATH, "//p[contains(text(),'新建会议')]"),wd)
wd.switch_to.window(wd.window_handles[1])
# 选择会议室
INFO("选择多会议室与参会人")
safe_send_keys((By.XPATH, "//input[@placeholder='请输入会议室名称']"), '测试会议室', wd)
send_keyboard((By.XPATH, "//input[@placeholder='请输入会议室名称']"), wd)
# 选择测试会议室的前三个
safe_click((By.XPATH, "//body[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[4]/div[2]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/label[1]/span[1]/span[1]"),wd)
safe_click((By.XPATH, "//body[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[4]/div[2]/table[1]/tbody[1]/tr[2]/td[1]/div[1]/label[1]/span[1]/span[1]"), wd)
safe_click((By.XPATH, "//body[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[4]/div[2]/table[1]/tbody[1]/tr[3]/td[1]/div[1]/label[1]/span[1]/span[1]"), wd)
# 选择参会人分配到第一个会议室
safe_click((By.XPATH, "(//img)[7]"),wd)
safe_send_keys((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), 'pgy', wd)
send_keyboard((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), wd)
# 全选搜索的参会人
safe_click((By.XPATH, "//div[contains(@class,'meeting_user')]//div[contains(@class,'el-table__fixed-header-wrapper')]//span[contains(@class,'el-checkbox__inner')]"),wd)
safe_click((By.XPATH, "//span[contains(text(),'完成')]"),wd)
# 选择参会人分配到第二个会议室
safe_click((By.XPATH, "(//img)[9]"),wd)
safe_send_keys((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), '测试', wd)
send_keyboard((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), wd)
# 全选搜索的参会人
safe_click((By.XPATH, "//div[contains(@class,'meeting_user')]//div[contains(@class,'el-table__fixed-header-wrapper')]//span[contains(@class,'el-checkbox__inner')]"),wd)
safe_click((By.XPATH, "//span[contains(text(),'完成')]"),wd)
# 会议创建,并查看详情
safe_click((By.XPATH, "//span[contains(text(),'确定创建')]"),wd)
safe_click((By.XPATH, "//span[contains(text(),'查看详情')]"), wd)
# 切换窗口2,转到会议详情界面
# wd.switch_to.window(wd.window_handles[1])
INFO("查看会议详情是否正确包含:多会议室、参会人、会议名称、会议时间等信息")
SELENIUM_LOG_SCREEN(wd, "75%")
class Unified_Platform_0002:
tags = ['统一平台','创建-本地会议-预定会议']
def teststeps(self):
wd = GSTORE['wd']
safe_click((By.XPATH, "(//img[@class='el-tooltip item'])[3]"),wd)
# 选择会议室
INFO("选择多会议室与参会人")
safe_send_keys((By.XPATH, "//input[@placeholder='请输入会议室名称']"), '测试会议室', wd)
send_keyboard((By.XPATH, "//input[@placeholder='请输入会议室名称']"), wd)
# 选择测试会议室的前三个
safe_click((By.XPATH, "//body[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[4]/div[2]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/label[1]/span[1]/span[1]"),wd)
safe_click((By.XPATH, "//body[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[4]/div[2]/table[1]/tbody[1]/tr[2]/td[1]/div[1]/label[1]/span[1]/span[1]"), wd)
safe_click((By.XPATH, "//body[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[4]/div[2]/table[1]/tbody[1]/tr[3]/td[1]/div[1]/label[1]/span[1]/span[1]"), wd)
# 选择参会人分配到第一个会议室
safe_click((By.XPATH, "(//img)[7]"),wd)
safe_send_keys((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), 'test', wd)
send_keyboard((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), wd)
# 全选搜索的参会人
safe_click((By.XPATH, "//div[contains(@class,'meeting_user')]//div[contains(@class,'el-table__fixed-header-wrapper')]//span[contains(@class,'el-checkbox__inner')]"),wd)
safe_click((By.XPATH, "//span[contains(text(),'完成')]"),wd)
# 选择参会人分配到第二个会议室
safe_click((By.XPATH, "(//img)[9]"),wd)
safe_send_keys((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), 'admin', wd)
send_keyboard((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), wd)
# 全选搜索的参会人
safe_click((By.XPATH, "//div[contains(@class,'meeting_user')]//div[contains(@class,'el-table__fixed-header-wrapper')]//span[contains(@class,'el-checkbox__inner')]"),wd)
safe_click((By.XPATH, "//span[contains(text(),'完成')]"),wd)
# 会议创建,并查看详情
safe_click((By.XPATH, "//span[contains(text(),'确定创建')]"),wd)
safe_click((By.XPATH, "//span[contains(text(),'查看详情')]"), wd)
# 切换窗口2,转到会议详情界面
# wd.switch_to.window(wd.window_handles[1])
INFO("查看会议详情是否正确包含:多会议室、参会人、会议名称、会议时间等信息")
SELENIUM_LOG_SCREEN(wd, "75%")
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建统一平台的绝对路径
platform_path = os.path.abspath(os.path.join(current_dir, '..','..','..'))
# 添加路径
sys.path.append(platform_path)
# 导入模块
from 统一平台.base.bases import *
class Unified_Platform_0001:
tags = ['统一平台','创建-视讯会议-立即开始']
def teststeps(self):
wd = GSTORE['wd']
safe_click((By.XPATH, "(//img[@class='el-tooltip item'])[3]"),wd)
# 选择融合视讯会议
INFO("选择融合视讯会议")
# 勾选视讯会议默认选择smc会议
safe_click((By.XPATH, "//span[contains(text(),'视讯会议')]"),wd)
# 选择腾讯会议
safe_click((By.XPATH, "//div[@aria-label='checkbox-group']//label[@class='el-checkbox']//span[@class='el-checkbox__inner']"),wd)
# 选择会议室与参会人
INFO("选择多会议室与参会人")
safe_send_keys((By.XPATH, "//input[@placeholder='请输入会议室名称']"), '展厅', wd)
send_keyboard((By.XPATH, "//input[@placeholder='请输入会议室名称']"), wd)
# 全选会议室
safe_click((By.XPATH, "//div[contains(@class,'el-table el-table--fit el-table--enable-row-transition')]//div[contains(@class,'el-table__fixed-header-wrapper')]//span[contains(@class,'el-checkbox__inner')]"),wd)
# 选择参会人分配对应会议室
safe_click((By.XPATH, "//div[contains(@class,'meeting_room')]//div[2]//div[2]//img[2]"),wd)
safe_send_keys((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), 'pgy', wd)
send_keyboard((By.XPATH, "//input[contains(@placeholder,'请输入关键字搜索')]"), wd)
# 全选搜索的参会人
safe_click((By.XPATH, "//div[contains(@class,'meeting_user')]//div[contains(@class,'el-table__fixed-header-wrapper')]//span[contains(@class,'el-checkbox__inner')]"),wd)
safe_click((By.XPATH, "//span[contains(text(),'完成')]"),wd)
# 会议创建,并查看详情
safe_click((By.XPATH, "//span[contains(text(),'确定创建')]"),wd)
safe_click((By.XPATH, "//span[contains(text(),'查看详情')]"), wd)
# print(f"这是当前窗口句柄{wd.window_handles}")
INFO("请查看会议详情是否正确包含:多会议室、会议号、会议名称、会议时间")
SELENIUM_LOG_SCREEN(wd, "75%")
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建统一平台的绝对路径
platform_path = os.path.abspath(os.path.join(current_dir, '..','..','..'))
# 添加路径
sys.path.append(platform_path)
# 导入模块
from 统一平台.base.bases import *
class Unified_Platform_0001:
tags = ['统一平台','会议控制']
def teststeps(self):
wd = GSTORE['wd']
# 进入会控界面
safe_click((By.XPATH, "//span[contains(text(),'进入会控')]"), wd)
# 进行多画面设置
safe_click((By.XPATH, "//div[@class='frames framesActive el-popover__reference']//span[contains(text(),'一画面')]"),wd)
# 设置四画面
safe_click((By.XPATH, "(//img[@class='img'])[705]"), wd)
# 会控界面-设备控制
INFO("关闭第一个会议室终端的摄像头")
safe_click((By.XPATH, "(//img[@title='关闭摄像头'])[1]"), wd)
sleep(1)
safe_click((By.XPATH, "//span[contains(text(),'确定')]"), wd)
SELENIUM_LOG_SCREEN(wd, "75%")
sleep(2)
INFO("开启麦克风")
safe_click((By.XPATH, "(//img[@title='取消静音'])[1]"), wd)
SELENIUM_LOG_SCREEN(wd, "75%")
import sys
import os
from time import sleep
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建统一平台的绝对路径
platform_path = os.path.abspath(os.path.join(current_dir, '..','..','..'))
# 添加路径
sys.path.append(platform_path)
# 导入模块
try:
from 统一平台.base.bases import *
except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}")
print("尝试使用绝对路径导入")
from 统一平台.base.bases import *
def suite_setup():
STEP(1, "初始化浏览器")
browser_init("统一平台")
wd = GSTORE['wd']
STEP(2, "登录系统")
safe_send_keys((By.XPATH, "//input[@placeholder='手机号/用户名/邮箱']"),"admin@pgy",wd)
safe_send_keys((By.XPATH, "//input[@placeholder='密码']"),"Ubains@13579",wd)
safe_send_keys((By.XPATH, "//input[@placeholder='图形验证']"),"csba",wd)
safe_click((By.XPATH, "//span[@class='el-checkbox__inner']"),wd)
sleep(2)
safe_click((By.XPATH, "//div[@id='pane-1']//div//span[contains(text(),'登录')]"),wd)
sleep(2)
def suite_teardown():
browser_quit()
\ No newline at end of file
{
"_comment_exhibit_unified_platform": "统一平台系统URL",
"统一平台": "http://192.168.5.164:38083/#/login"
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论