yj
2024-07-25 c0dc1bc9676d0bc15355cfd16e9bb92a31518aa8
po/test_package_list_page.py
@@ -1,6 +1,7 @@
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
@@ -9,66 +10,251 @@
    测试包列表页面
    """
    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_wait(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_wait(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_wait(testPackageName, PackageList.add_testPackageName_input)
    def reportCompanyName_input(self, reportCompanyName):
        """
        输入报告企业名称
        :param reportCompanyName: 报告企业名称
        :return:
        """
        self.send_text_wait(reportCompanyName, PackageList.add_reportCompanyName_input)
    def testPackageType_select(self, testPackageType):
        """
        选择测试包类型
        :param testPackageType:
        :return:
        """
        # 点击下拉框
        self.click_wait(PackageList.add_testPackageType_select)
        # 获取所有选项
        options = self.get_elements_wait(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):
        """
@@ -77,12 +263,11 @@
        :return:
        """
        # 点击查询按钮
        self.click_wait(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_wait(PackageList.prodTree_option)
        options = self.get_eles(self.es.prodTree_option, timeout=10)
        # 判断选项是否与传入选项相等
        for opt in options:
            if opt.text == prodName:
@@ -91,146 +276,33 @@
        # 切换到上一层的iframe
        self.switch_parent_iframe()
        # 点击确认按钮
        self.click_wait(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_wait(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_wait(invalid_time, PackageList.add_invalidTime)
        self.click_wait(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_wait(PackageList.add_templateLangType_select)
        # 获取所有选项
        options = self.get_elements_wait(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_wait(PackageList.add_hrTemplateLangType_select)
        # 获取所有选项
        options = self.get_elements_wait(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_wait(PackageList.add_reportTemplateId_select)
        # 获取所有选项
        options = self.get_elements_wait(PackageList.add_reportTemplateId_option)
        # 判断选项是否与传入的选项相等
        for opt in options:
            for template in templates:
                if opt.text == template:
                    # 相等则点击该选项
                    opt.click()
                    break
        # 再次点击下拉框
        self.click_wait(PackageList.add_reportTemplateId_select)
    def position_input(self, text):
        """
        输入要评价的岗位
        :param text:
        :return:
        """
        self.send_text_wait(text, PackageList.add_position_input)
    def professionalCategory_input(self, text):
        """
        输入职业大类
        :param text:
        :return:
        """
        self.send_text_wait(text, PackageList.add_professionalCategory_input)
    def superiorPosition_input(self, text):
        """
        输入上级岗位
        :param text:
        :return:
        """
        self.send_text_wait(text, PackageList.add_superiorPosition_input)
    def autoSendReport_checkbox(self):
        """
        点击测试者接收报告
        :return:
        """
        self.click_wait(PackageList.add_autoSendReport_checkbox)
    def memberReportLangType_select(self, text):
        """
        测试者报告邮件语言类型
        :param text: 语言类型,可以选择多个,使用 , 分隔
        :return:
        """
        # 分割text
        lang_types = text.split(",")
        # 点击下拉框
        self.click_wait(PackageList.add_memberTemplateLangType_select)
        # 获取所有选项
        options = self.get_elements_wait(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_wait(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):
        """
@@ -238,72 +310,101 @@
        :param packageName: 测试包名称
        :return: bool
        """
        names = self.get_elements_wait(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_wait(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_wait(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_wait(PackageList.share_cancel_btn)
        time.sleep(1)
        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_wait(click_loc)
        # 获取所有选项
        options = self.get_elements_wait(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