from datetime import datetime import time from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import pytest from selenium import webdriver from po.login_page import LoginPage from po.home_page import HomePage from po.test_package_list_page import TestPackageListPage from po.share_add_page import ShareAddPage from po.maq_answer_page import MAQAnswerPage from comm.my_random import * class TestMAQ: driver = None test_package_name = "MAQ自动测试包-20230720170011" @pytest.mark.parametrize('data_read', ["login"], indirect=True) def test_login(self, data_read: dict): """ 打开页面并进行登录测试 :param data_read: 执行数据读取的函数并获取到返回值 :return: """ TestMAQ.driver = webdriver.Chrome() driver = TestMAQ.driver login_page = LoginPage(driver) try: # 打开链接 driver.get(data_read["url"]) except: # 链接打开出现异常说明链接无法访问,捕获异常但不做处理 pass # 浏览器窗口最大化 driver.maximize_window() # 获取到刷新按钮并每10秒点击一次,知道刷新按钮消失 while True: try: # 判断打开的页面是否存在刷新按钮 reload_btn = login_page.get_element((By.XPATH, "//div[@id='buttons']/div/button[@id='reload-button']")) # 点击刷新按钮 reload_btn.click() time.sleep(10) except: # 出现异常表示不存在刷新按钮 # 接着判断是否存在nginx error! try: nginx_error = login_page.get_element((By.XPATH, "//strong[text() = 'nginx error!']")) # 存在则睡眠10秒 time.sleep(10) except: break # 输入用户名 login_page.send_keys("username_ipt", data_read["username"]) # 输入密码 login_page.oper_elem("password_ipt", data_read["password"]) # 输入验证码 login_page.oper_elem("code_ipt", data_read["code"]) # 点击登录按钮 login_page.oper_elem("login_btn") time.sleep(2) assert login_page.is_login_success() @pytest.mark.parametrize('data_read', ["MAQ"], indirect=True) def test_create_package(self, data_read: dict): """ 创建测试包 :param data_read: 读取数据 :return: """ # 获取driver driver = TestMAQ.driver # 创建home页面的对象 home_page = HomePage(driver) # 点击左侧菜单进入页面 home_page.menu_select(data_read["menu"]) # 创建测试包列表页面的对象 test_package_list = TestPackageListPage(driver) # 切换到测试包列表页面iframe test_package_list.oper_elem("this_iframe") time.sleep(2) # 点击创建按钮 test_package_list.oper_elem("create_btn") # 切换到添加窗口的iframe test_package_list.oper_elem("add_iframe") # 获取当前时间 current_time = datetime.now() # 转换为字符串 time_str = current_time.strftime("%Y%m%d%H%M%S") # 创建测试包填写的参数 # 测试包名称 test_package_name = "MAQ自动测试包-" + time_str # 设置测试包名称为类变量 TestMAQ.test_package_name = test_package_name # 获取创建测试包的数据 create_data = data_read["add"] # 填写测试包名称 test_package_list.oper_elem("add_testPackageName_input", test_package_name) # 填写报告企业名称 test_package_list.oper_elem("add_reportCompanyName_input", create_data["company"]) # 选择测试包类型 test_package_list.oper_elem("add_testPackageType_select", create_data["type"]) # 点击产品包按钮 test_package_list.oper_elem("add_prodTree_btn") # 切换到prodTree的iframe test_package_list.oper_elem("prodTree_iframe") # 选择产品包 test_package_list.oper_elem("prodTree_option", create_data["product"]) # 回到上一层iframe test_package_list.switch_parent_iframe() # 点击确认按钮 test_package_list.oper_elem("prodTree_confirm_btn") # 输入hr邮箱 test_package_list.oper_elem("add_hrEmail_input", create_data["hrEmail"]) # 输入有效期并点击以取消日期选择器显示 test_package_list.oper_elem("add_invalidTime_input", create_data["invalid"]) test_package_list.oper_elem("add_invalidTime_btn") # 选择邀请邮件语言类型 test_package_list.oper_elem("add_templateLangType_select", create_data["memberLang"]) # 选择HR邮件语言类型 test_package_list.oper_elem("add_hrTemplateLangType_select", create_data["hrReportLang"]) # 选择报告模板 test_package_list.oper_elem("add_reportTemplateId_select", create_data["reportTemplate"]) # 点击测试者接收报告 test_package_list.oper_elem("add_autoSendReport_checkbox") # 选择测试者报告邮箱语言类型 test_package_list.oper_elem("add_memberTemplateLangType_select", create_data["memberReportLang"]) # 切换到上一层iframe test_package_list.switch_parent_iframe() # 点击确认按钮 test_package_list.oper_elem("add_confirm_btn") time.sleep(5) # 判断是否成功创建 assert test_package_list.is_create_success(test_package_name) @pytest.mark.parametrize('data_read', ["MAQ"], indirect=True) def test_open_url(self, data_read: dict): """ 打开分享链接 :return: """ # 获取driver driver = TestMAQ.driver # 创建测试包列表页面的对象 test_package_list = TestPackageListPage(driver) # 勾选新创建的测试包 test_package_list.click_package_checkbox(TestMAQ.test_package_name) # 点击生成分享链接按钮 test_package_list.oper_elem("share_1_btn") # 切换到分享窗口的iframe test_package_list.oper_elem("share_iframe") # 获取到url url = test_package_list.oper_elem("share_url_text") # 切换到上一层iframe test_package_list.switch_parent_iframe() # 点击关闭按钮 test_package_list.oper_elem("share_cancel_btn") time.sleep(1) # 打开新标签页加载url test_package_list.open_new_table_to_url(url) # 创建分享页面对象 share_add = ShareAddPage(driver) # 填写信息提交并获取测试链接 name = random_string(8) email = name + "@gmail.com" # 填写邮箱和姓名并提交 share_add.oper_elem("name_input", name) share_add.oper_elem("email_input", email) share_add.oper_elem("submit_btn") # 获取到测试链接 test_url = share_add.oper_elem("test_url_text") # 当前页面打开链接 driver.get(test_url) # 点击提交按钮 share_add.oper_elem("submit_btn") # 获取数据 info = data_read["info"] # 填写基本信息并提交 share_add.oper_elem("fill_email_input", email) share_add.oper_elem("fill_position_input", info["position"]) share_add.oper_elem("fill_dept_input", info["dept"]) share_add.oper_elem("submit_btn") time.sleep(3) def test_answer(self): # 获取driver driver = TestMAQ.driver # 创建answer对象 answer_page = MAQAnswerPage(driver) # 点击开始测试 answer_page.oper_elem("start_btn") # 开始答题 flag = answer_page.answer() # 答完题关闭当前标签页 driver.close() if flag is not None or not flag: assert flag return def test_delete_package(self): # 获取driver driver = TestMAQ.driver # 创建测试包列表页面的对象 test_package_list = TestPackageListPage(driver) # 切换到第一个标签页 test_package_list.switch_window(0) test_package_list.oper_elem("this_iframe") # 删除测试包 test_package_list.oper_elem("delete_btn") test_package_list.oper_elem("delete_confirm_btn") time.sleep(3) # 关闭 driver.quit() if __name__ == '__main__': pytest.main(["-s", __file__])