from base.base_page import BasePage from selenium.webdriver.common.by import By from elements.test_package_list_elements import TestPackageListElements from datetime import datetime import time class TestPackageListPage(BasePage): """ 测试包列表页面 """ es = TestPackageListElements def __init__(self, driver): """初始化时将iframe切换到当前页面""" super().__init__(driver) try: self.driver.switch_to.default_content() self.switch_iframe(self.es.this_iframe) except: pass def create_package(self, data: dict): """ 创建测试包 :param data: 测试包参数 :return: """ # 点击创建按钮 self.click(self.es.create_btn) # 切换到add的iframe self.switch_iframe(self.es.add_iframe) # 获取当前时间 current_time = datetime.now() # 转换为字符串 time_str = current_time.strftime("%Y%m%d%H%M%S") # 创建测试包填写的参数 # 测试包名称 test_package_name = data["product"] + "自动测试包-" + time_str # 填写测试包名称 self.fill(self.es.add_testPackageName_input, test_package_name, timeout=10) # 填写报告企业名称 self.fill(self.es.add_reportCompanyName_input, data["company"], timeout=10) # 选择测试包类型 self.select(self.es.add_testPackageType_select, self.es.add_testPackageType_option, data["type"]) # 选择区域 self.select(self.es.add_testPackageArea_select, self.es.add_testPackageArea_option, data["area"]) # 选择产品包 self.prodTree_select(data["product"]) # 输入hr邮箱 self.fill(self.es.add_hrEmail_input, data["hrEmail"]) # 输入有效期 self.fill(self.es.add_invalidTime, data["invalid"]) # 点击有效期输入框来隐藏日期选择器 self.click(self.es.add_invalidTime) # 选择邀请邮件语言类型 self.select(self.es.add_templateLangType_select, self.es.add_templateLangType_option, data["memberLang"]) # 选择HR邮件语言类型 self.select(self.es.add_hrTemplateLangType_select, self.es.add_hrTemplateLangType_option, data["hrReportLang"]) # 选择报告模板 self.select(self.es.add_reportTemplateId_select, self.es.add_reportTemplateId_option, data["reportTemplate"]) # 判断是否为工作分析包 if data["type"] == "工作分析包": # 如果是则填写 # 输入要评价的岗位 self.fill(self.es.add_position_input, data["position"]) # 输入职业大类 self.fill(self.es.add_professionalCategory_input, data["professionalCategory"]) # 输入上级岗位 self.fill(self.es.add_superiorPosition_input, data["superiorPosition"]) # 点击测试者接收报告 self.click(self.es.add_autoSendReport_checkbox) # 选择测试者报告邮箱语言类型 self.select(self.es.add_memberReportLangType_select, self.es.add_memberReportLangType_option, data["memberReportLang"]) # 回到上一层iframe self.switch_parent_iframe() # 点击确认按钮 self.click(self.es.add_confirm_btn) return test_package_name def edit_package(self, data: dict): """ 修改测试包 :param data: :return: """ # 切换到edit的iframe self.switch_iframe(self.es.edit_iframe) # 获取当前时间 current_time = datetime.now() # 转换为字符串 time_str = current_time.strftime("%Y%m%d%H%M%S") # 创建测试包填写的参数 # 测试包名称 test_package_name = data["product"] + "自动测试包-" + time_str # 填写测试包名称 self.fill(self.es.add_testPackageName_input, test_package_name, timeout=10) # 填写报告企业名称 self.fill(self.es.add_reportCompanyName_input, data["company"], timeout=10) # 选择区域 self.select(self.es.add_testPackageArea_select, self.es.add_testPackageArea_option, data["area"]) # 输入hr邮箱 self.fill(self.es.add_hrEmail_input, data["hrEmail"]) # 输入有效期 self.fill(self.es.add_invalidTime, data["invalid"]) # 点击有效期输入框来隐藏日期选择器 self.click(self.es.add_invalidTime) # 选择邀请邮件语言类型 self.select(self.es.add_templateLangType_select, self.es.add_templateLangType_option, data["memberLang"]) # 选择HR邮件语言类型 self.select(self.es.add_hrTemplateLangType_select, self.es.add_hrTemplateLangType_option, data["hrReportLang"]) # 选择报告模板 self.select(self.es.add_reportTemplateId_select, self.es.add_reportTemplateId_option, data["reportTemplate"]) # 判断是否为工作分析包 if data["type"] == "工作分析包": # 如果是则填写 # 输入要评价的岗位 self.fill(self.es.add_position_input, data["position"]) # 输入职业大类 self.fill(self.es.add_professionalCategory_input, data["professionalCategory"]) # 输入上级岗位 self.fill(self.es.add_superiorPosition_input, data["superiorPosition"]) # 选择测试者报告邮箱语言类型 self.select(self.es.add_memberReportLangType_select, self.es.add_memberReportLangType_option, data["memberReportLang"]) # 回到上一层iframe self.switch_parent_iframe() # 点击确认按钮 self.click(self.es.edit_confirm_btn) return test_package_name def verify_edit_success(self, package_name, data): """ 验证修改是否成功 :param package_name: 测试包名称 :param data: :return: """ # 勾选对应测试包 self.select_package_checkbox(package_name) # 点击修改按钮 self.click(self.es.edit_btn) time.sleep(2) # 切换到edit的iframe self.switch_iframe(self.es.edit_iframe) # 判断测试包名称 flag = self.equals(self.es.add_testPackageName_input, package_name) if not flag: return flag # 判断报告企业名称 flag = self.equals(self.es.add_reportCompanyName_input, data["company"]) if not flag: return flag # 判断类型 flag = self.equals(self.es.add_testPackageType_text, data["type"]) if not flag: return flag # 判断区域 flag = self.equals(self.es.add_testPackageArea_text, data["area"]) if not flag: return flag # 判断产品包 flag = self.equals(self.es.add_prodTree_input, data["product"]) if not flag: return flag # 判断HR接收报告邮箱 flag = self.equals(self.es.add_hrEmail_input, data["hrEmail"]) if not flag: return flag # 判断有效期 flag = self.equals(self.es.add_invalidTime, data["invalid"]) if not flag: return flag # 判断语言类型 text = "亲爱的" if data["memberLang"] == "English": text = "Dear" elif data["memberLang"] == "ไทย": text = "เรียน" # 判断测试者邀请内容 flag = self.contains(self.es.add_templateLangType_text, text) if not flag: return flag # 判断语言类型 text = "亲爱的" if data["hrReportLang"] == "English": text = "Dear HR Staff at" elif data["hrReportLang"] == "ไทย": text = "เรียนฝ่ายบุคคลของ" # 判断HR邮件内容 flag = self.contains(self.es.add_hrTemplateLangType_text, text) if not flag: return flag # 判断报告模板 flag = self.contains(self.es.add_reportTemplateId_text, data["reportTemplate"]) if not flag: return flag # 判断是否为工作分析包 if data["type"] == "工作分析包": # 判断要评价的岗位 flag = self.equals(self.es.add_position_input, data["position"]) if not flag: return flag # 判断职业大类 flag = self.equals(self.es.add_professionalCategory_input, data["professionalCategory"]) if not flag: return flag # 判断上级岗位 flag = self.equals(self.es.add_superiorPosition_input, data["superiorPosition"]) if not flag: return flag # 判断语言类型 text = "亲爱的" if data["memberReportLang"] == "English": text = "Dear HR Staff at" elif data["memberReportLang"] == "ไทย": text = "เรียน" # 判断测试者 flag = self.contains(self.es.add_memberReportLangType_text, text) if not flag: return flag # 判断人口学编码 if "checkCode" in data: # 校验被勾选的人口选编码 flag = self.verify_code_checked(data["checkCode"]) if not flag: return flag if "uncheckCode" in data: # 校验被取消勾选的人口选编码 flag = self.verify_code_unchecked(data["checkCode"]) if not flag: return flag return flag def delete_package(self, package_name): """ 删除测试包 :return: """ # 勾选对应测试包 self.select_package_checkbox(package_name) # 点击删除按钮 self.click(self.es.delete_btn) # 点击确认按钮 self.click(self.es.delete_confirm_btn) def prodTree_select(self, prodName): """ 选择产品包 :param prodName: :return: """ # 点击查询按钮 self.click(self.es.add_prodTree_btn) # 切换到prodTree的iframe self.switch_iframe_wait(self.es.prodTree_iframe) # 获取所有选项 options = self.get_eles(self.es.prodTree_option, timeout=10) # 判断选项是否与传入选项相等 for opt in options: if opt.text == prodName: opt.click() break # 切换到上一层的iframe self.switch_parent_iframe() # 点击确认按钮 self.click(self.es.prodTree_confirm_btn) def select_code_checkbox(self, check_text, uncheck_text): """ 选择人口学编码 :param uncheck_text: 取消选中的选框文本,以 , 分割 :param check_text: 选择的选框文本,以 , 分割 :return: """ # 获取所有人口选编码选框元素 code_boxs = self.get_elements_wait(self.es.add_code_checkbox) # 将check_text分割 code_check_texts = check_text.split(',') # 选择人口学编码 for code_text in code_check_texts: for code_box in code_boxs: if code_text == code_box.text: code_box.click() # 将uncheck_text分割 code_uncheck_texts = uncheck_text.split(',') # 取消选择人口学编码 for code_text in code_uncheck_texts: for code_box in code_boxs: if code_text == code_box.text: code_box.click() def is_create_success(self, packageName): """ 判断这个测试包是否创建成功 :param packageName: 测试包名称 :return: bool """ names = self.get_eles(self.es.table_packageName_a) for name in names: if name.text == packageName: return True return False def select_package_checkbox(self, packageName): """ 选中测试包,勾选对应测试包列表的复选框 :param packageName: 测试包名称 :return: """ # 获取到table的所有tr table_trs = self.get_eles(self.es.table_package_tr) for tr in table_trs: # 判断复选框是否为选中状态 tr_class = tr.get_attribute("class") if tr_class == "selected": # 已点击直接退出循环 continue # 测试包名称在tr中的定位 package_name_loc = (By.XPATH, "td[2]/a") # 获取tr中的测试包名称 tr_package_name = tr.find_element(*package_name_loc).text if tr_package_name == packageName: # 复选框在tr中的定位 package_checkbox_loc = (By.XPATH, "td[1]/input") # 获取复选框元素 tr_checkbox = tr.find_element(*package_checkbox_loc) # 点击复选框 tr_checkbox.click() break def click_package_name(self, packageName): """ 点击包名称跳转页面 :param packageName: :return: """ # 获取到所有测试包名称a标签 package_names = self.get_eles(self.es.table_packageName_a) for name in package_names: if name.text == packageName: name.click() def get_share_url(self, package_name): """ 获取分享链接 :return: url """ # 勾选测试包 self.select_package_checkbox(package_name) # 点击生成分享链接按钮 self.click(self.es.share_1_btn) # 切换到share的iframe中 self.switch_iframe(self.es.share_iframe) # 获取url url = self.get_value_js(self.es.share_url_input) # 退回上一层iframe self.switch_parent_iframe() # 点击关闭按钮 self.click(self.es.share_cancel_btn) time.sleep(2) return url def verify_code_checked(self, text: str): """ 校验人口学编码是否勾选 :return: """ texts = text.split(",") # 获取到所有人口学编码的label eles = self.get_eles(self.es.add_code_checkbox) for ele in eles: for t in texts: if t == ele.text: ele_class = ele.find_element(By.XPATH, "div").get_attribute("class") # 如果class不包含checked则返回False if "checked" not in ele_class: return False def verify_code_unchecked(self, text: str): """ 校验人口学编码是否没有被勾选 :return: """ texts = text.split(",") # 获取到所有人口学编码的label eles = self.get_eles(self.es.add_code_checkbox) for ele in eles: for t in texts: if t== ele.text: ele_class = ele.find_element(By.XPATH, "div").get_attribute("class") # 如果class包含checked则返回False if "checked" in ele_class: return False