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
|