| | |
| | | from base.base_page import BasePage |
| | | from selenium.webdriver.common.by import By |
| | | from elements.test_package_list_elements import TestPackageListElements as PackageList |
| | | from elements.test_package_list_elements import TestPackageListElements |
| | | from datetime import datetime |
| | | import time |
| | | |
| | | |
| | |
| | | 测试包列表页面 |
| | | """ |
| | | |
| | | es = TestPackageListElements |
| | | |
| | | def __init__(self, driver): |
| | | """初始化时将iframe切换到当前页面""" |
| | | super().__init__(driver) |
| | | try: |
| | | self.driver.switch_to.default_content() |
| | | self.switch_iframe(PackageList.this_iframe) |
| | | self.switch_iframe(self.es.this_iframe) |
| | | except: |
| | | pass |
| | | |
| | | def create_btn(self): |
| | | def create_package(self, data: dict): |
| | | """ |
| | | 点击创建按钮 |
| | | 创建测试包 |
| | | :param data: 测试包参数 |
| | | :return: |
| | | """ |
| | | self.click(PackageList.create_btn) |
| | | # 切换到add窗口的iframe |
| | | self.switch_iframe(PackageList.add_iframe) |
| | | # 点击创建按钮 |
| | | 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"]) |
| | | |
| | | def delete_package(self): |
| | | # 判断是否为工作分析包 |
| | | 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(PackageList.delete_btn) |
| | | self.click(self.es.delete_btn) |
| | | # 点击确认按钮 |
| | | self.click_wait(PackageList.delete_confirm_btn) |
| | | |
| | | def testPackageName_input(self, testPackageName): |
| | | """ |
| | | 输入测试包名称 |
| | | :param testPackageName: 测试包名称 |
| | | :return: |
| | | """ |
| | | self.send_text(testPackageName, PackageList.add_testPackageName_input) |
| | | |
| | | def reportCompanyName_input(self, reportCompanyName): |
| | | """ |
| | | 输入报告企业名称 |
| | | :param reportCompanyName: 报告企业名称 |
| | | :return: |
| | | """ |
| | | self.send_text(reportCompanyName, PackageList.add_reportCompanyName_input) |
| | | |
| | | def testPackageType_select(self, testPackageType): |
| | | """ |
| | | 选择测试包类型 |
| | | :param testPackageType: |
| | | :return: |
| | | """ |
| | | # 点击下拉框 |
| | | self.click(PackageList.add_testPackageType_select) |
| | | # 获取所有选项 |
| | | options = self.get_elements(PackageList.add_testPackageType_option) |
| | | # 判断选项是否与传入的选项相等 |
| | | for opt in options: |
| | | if opt.text == testPackageType: |
| | | # 相等则点击该选项 |
| | | opt.click() |
| | | break |
| | | self.click(self.es.delete_confirm_btn) |
| | | |
| | | def prodTree_select(self, prodName): |
| | | """ |
| | |
| | | :return: |
| | | """ |
| | | # 点击查询按钮 |
| | | self.click(PackageList.add_prodTree_btn) |
| | | self.click(self.es.add_prodTree_btn) |
| | | # 切换到prodTree的iframe |
| | | self.switch_iframe_wait(PackageList.prodTree_iframe) |
| | | time.sleep(2) |
| | | self.switch_iframe_wait(self.es.prodTree_iframe) |
| | | # 获取所有选项 |
| | | options = self.get_elements(PackageList.prodTree_option) |
| | | options = self.get_eles(self.es.prodTree_option, timeout=10) |
| | | # 判断选项是否与传入选项相等 |
| | | for opt in options: |
| | | if opt.text == prodName: |
| | |
| | | # 切换到上一层的iframe |
| | | self.switch_parent_iframe() |
| | | # 点击确认按钮 |
| | | self.click(PackageList.prodTree_confirm_btn) |
| | | self.click(self.es.prodTree_confirm_btn) |
| | | |
| | | def hrReportEmail_input(self, hr_email): |
| | | def select_code_checkbox(self, check_text, uncheck_text): |
| | | """ |
| | | 输入HR接收报告邮箱 |
| | | :param hr_email: |
| | | 选择人口学编码 |
| | | :param uncheck_text: 取消选中的选框文本,以 , 分割 |
| | | :param check_text: 选择的选框文本,以 , 分割 |
| | | :return: |
| | | """ |
| | | self.send_text(hr_email, PackageList.add_hrEmail_input) |
| | | # 获取所有人口选编码选框元素 |
| | | code_boxs = self.get_elements_wait(self.es.add_code_checkbox) |
| | | |
| | | def invalidTime_input(self, invalid_time): |
| | | """ |
| | | 输入有效期 |
| | | :param invalid_time: |
| | | :return: |
| | | """ |
| | | self.send_text(invalid_time, PackageList.add_invalidTime) |
| | | self.click(PackageList.add_invalidTime) |
| | | # 将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() |
| | | |
| | | def testTemplateLangType_select(self, text): |
| | | """ |
| | | 选择测试者邀请邮件内容模板 |
| | | :param text: 语言类型,可以选择多个,使用 , 分隔 |
| | | :return: |
| | | """ |
| | | # 分割text |
| | | lang_types = text.split(",") |
| | | # 点击下拉框 |
| | | self.click(PackageList.add_templateLangType_select) |
| | | # 获取所有选项 |
| | | options = self.get_elements(PackageList.add_templateLangType_option) |
| | | # 判断选项是否与传入的选项相等 |
| | | for opt in options: |
| | | for lang_type in lang_types: |
| | | if opt.text == lang_type: |
| | | # 相等则点击该选项 |
| | | opt.click() |
| | | break |
| | | |
| | | def hrTemplateLangType_select(self, text): |
| | | """ |
| | | 选择HR邮件内容模板 |
| | | :param text: 语言类型,可以选择多个,使用 , 分隔 |
| | | :return: |
| | | """ |
| | | # 分割text |
| | | lang_types = text.split(",") |
| | | # 点击下拉框 |
| | | self.click(PackageList.add_hrTemplateLangType_select) |
| | | # 获取所有选项 |
| | | options = self.get_elements(PackageList.add_hrTemplateLangType_option) |
| | | # 判断选项是否与传入的选项相等 |
| | | for opt in options: |
| | | for lang_type in lang_types: |
| | | if opt.text == lang_type: |
| | | # 相等则点击该选项 |
| | | opt.click() |
| | | break |
| | | |
| | | def reportTemplate_select(self, text): |
| | | """ |
| | | 报告模板选择 |
| | | :param text: 模板,可以选择多个,使用 , 分隔 |
| | | :return: |
| | | """ |
| | | # 分割text |
| | | templates = text.split(",") |
| | | # 点击下拉框 |
| | | self.click(PackageList.add_reportTemplateId_select) |
| | | # 获取所有选项 |
| | | options = self.get_elements(PackageList.add_reportTemplateId_option) |
| | | # 判断选项是否与传入的选项相等 |
| | | for opt in options: |
| | | for template in templates: |
| | | if opt.text == template: |
| | | # 相等则点击该选项 |
| | | opt.click() |
| | | break |
| | | # 再次点击下拉框 |
| | | self.click(PackageList.add_reportTemplateId_select) |
| | | |
| | | def autoSendReport_checkbox(self): |
| | | """ |
| | | 点击测试者接收报告 |
| | | :return: |
| | | """ |
| | | self.click(PackageList.add_autoSendReport_checkbox) |
| | | |
| | | def memberReportLangType_select(self, text): |
| | | """ |
| | | 测试者报告邮件语言类型 |
| | | :param text: 语言类型,可以选择多个,使用 , 分隔 |
| | | :return: |
| | | """ |
| | | # 分割text |
| | | lang_types = text.split(",") |
| | | # 点击下拉框 |
| | | self.click(PackageList.add_memberTemplateLangType_select) |
| | | # 获取所有选项 |
| | | options = self.get_elements(PackageList.add_memberTemplateLangType_option) |
| | | # 判断选项是否与传入的选项相等 |
| | | for opt in options: |
| | | for lang_type in lang_types: |
| | | if opt.text == lang_type: |
| | | # 相等则点击该选项 |
| | | opt.click() |
| | | break |
| | | |
| | | def add_confirm(self): |
| | | """ |
| | | 点击确认按钮 |
| | | :return: |
| | | """ |
| | | # 回到上一层iframe |
| | | self.switch_parent_iframe() |
| | | self.click(PackageList.add_confirm_btn) |
| | | # 将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_elements(PackageList.table_packageName_a) |
| | | names = self.get_eles(self.es.table_packageName_a) |
| | | for name in names: |
| | | if name.text == packageName: |
| | | return True |
| | | return False |
| | | |
| | | def click_package_checkbox(self, packageName): |
| | | def select_package_checkbox(self, packageName): |
| | | """ |
| | | 选中测试包,勾选对应测试包列表的复选框 |
| | | :param packageName: 测试包名称 |
| | | :return: |
| | | """ |
| | | # 获取到table的所有tr |
| | | table_trs = self.get_elements(PackageList.table_package_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 = self.get_element_in(tr, package_name_loc).text |
| | | 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 = self.get_element_in(tr, package_checkbox_loc) |
| | | tr_checkbox = tr.find_element(*package_checkbox_loc) |
| | | # 点击复选框 |
| | | tr_checkbox.click() |
| | | break |
| | | |
| | | def click_share_1_btn(self): |
| | | def click_package_name(self, packageName): |
| | | """ |
| | | 点击生成分享链接按钮 |
| | | 点击包名称跳转页面 |
| | | :param packageName: |
| | | :return: |
| | | """ |
| | | self.click(PackageList.share_1_btn) |
| | | # 获取到所有测试包名称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): |
| | | 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(PackageList.share_iframe) |
| | | self.switch_iframe(self.es.share_iframe) |
| | | # 获取url |
| | | url = self.get_input_value_js(PackageList.share_url_input) |
| | | url = self.get_value_js(self.es.share_url_input) |
| | | # 退回上一层iframe |
| | | self.switch_parent_iframe() |
| | | # 点击关闭按钮 |
| | | self.click(PackageList.share_cancel_btn) |
| | | self.click(self.es.share_cancel_btn) |
| | | time.sleep(2) |
| | | return url |
| | | |
| | | |
| | | def selector(self, click_loc, options_loc, text): |
| | | def verify_code_checked(self, text: str): |
| | | """ |
| | | 通用选择器,直接调用选择下拉框选项 |
| | | :param click_loc: 点击后出现下拉选项的元素定位 |
| | | :param options_loc: 选项的元素定位 |
| | | :param text: 判断点击的文本 |
| | | 校验人口学编码是否勾选 |
| | | :return: |
| | | """ |
| | | # 点击下拉框 |
| | | self.click(click_loc) |
| | | # 获取所有选项 |
| | | options = self.get_elements(options_loc) |
| | | # 判断选项是否与传入的选项相等 |
| | | for opt in options: |
| | | if opt.text == text: |
| | | # 相等则点击该选项 |
| | | opt.click() |
| | | break |
| | | 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 |
| | | |