Project

General

Profile

Files » issue_page.py

UserName LastName, 07/14/2024 02:29 PM

 
import allure
from selenium.common import NoSuchElementException
from selenium.webdriver.common.by import By

from page.home_page import HomePage
from utils.logger import logger


class IssuePage(HomePage):
_CreateIssue = (By.CSS_SELECTOR, ".new-issue")
_IssueName = (By.CSS_SELECTOR, "#issue_subject")
# 跟踪
_TRACKER = (By.CSS_SELECTOR, "#issue_tracker_id>option[selected='selected']")
# 优先级下拉框
# Priority_select = (By.CSS_SELECTOR, "#issue_priority_id")
# 默认的优先级数据列表
_Priority_list = ['Low', 'Normal', 'High', 'Urgent', 'Immediate']
# 指派人
_Assign = (By.CSS_SELECTOR, ".assign-to-me-link")
_StartTime = (By.CSS_SELECTOR, "#issue_start_date")
_DueTime = (By.CSS_SELECTOR, "#issue_due_date")
# 描述信息
_Description = (By.CSS_SELECTOR, "#issue_description")
_File = (By.XPATH, "//*[@type='file']")
_Commit = (By.CSS_SELECTOR, "[name='commit']")
_Edit = (By.CSS_SELECTOR, ".icon.icon-edit")
_NoAssign = (By.CSS_SELECTOR, "#issue_assigned_to_id>option")
_issue_status_list = ['In Progress', 'Resolved', 'Feedback', 'Closed', 'Rejected', 'New']
_UpdateDescription = (By.CSS_SELECTOR, "#issue_notes")

@allure.step("点击新建问题")
def to_create_issue(self):
logger.info("点击新建问题")
self.find_and_click(*self._CreateIssue)
return self

@allure.step("填写issue信息")
def write_issue_messages(self, issue_name, priority=None, start_time=None, due_time=None, description=None, file_path=None, time_prefix="00"):
"""
:param issue_name:
:param priority: 优先级
:param start_time: 开始时间
:param due_time: 预计完成时间
:param description: 描述
:param file_path: 上传文件的路径
:param time_prefix: 时间的前缀,用来拼接时间,作用于时间组件
:return:
"""
# 日期格式:002024-02-01
logger.info("填写issue信息")
if not issue_name:
return self
self.find_and_send(issue_name, *self._IssueName)
if description:
self.find_and_send(description, *self._Description)
if priority and priority in self._Priority_list:
_Priority = (By.XPATH, f"//*[text()='{priority}']")
self.find_and_click(*_Priority)
if start_time:
self.find_and_send(time_prefix+start_time, *self._StartTime)
if due_time:
self.find_and_send(time_prefix+due_time, *self._DueTime)
# 将issue指派给我
self.find_and_click(*self._Assign)
if file_path:
self.find_and_send(file_path, *self._File)
return self

@allure.step("提交信息")
def commit(self):
logger.info("提交信息")
self.set_time(0.5)
self.finds(*self._Commit)[-1].click()
return self

@allure.step("点击编辑按钮")
def edit_issue(self):
logger.info("点击编辑按钮")
self.find_and_click(*self._Edit)
return self

@allure.step("修改issue信息")
def update_project_messages(self, issue_name=None, priority=None, start_time=None, due_time=None, description=None, status=None):
# 日期格式:002024-02-01
logger.info("修改issue信息")
if issue_name:
self.find_and_send(issue_name, *self._IssueName)
if description:
self.find_and_send(description, *self._UpdateDescription)
if priority and priority in self._Priority_list:
_Priority = (By.XPATH, f"//*[text()='{priority}']")
self.find_and_click(*_Priority)
if start_time:
self.find_and_send("00"+start_time, *self._StartTime)
if due_time:
self.find_and_send("00"+due_time, *self._DueTime)
# 将指派取消
self.find_and_click(*self._NoAssign)
# 更改issue状态
if status and status in self._issue_status_list:
_Status = (By.XPATH, f"//option[text()='{status}']")
self.find_and_click(*_Status)
return self

@allure.step("删除issue")
def delete_issue(self, name, handle: bool):
logger.info("删除issue")
data = (By.XPATH, f"//*[@class='subject']/a[text()='{name}']/../..//*[@title='行为']")
delete = (By.CSS_SELECTOR, ".icon.icon-del")
self.find_and_click(*data)
self.set_time(0.5)
self.find_and_click(*delete)
self.handle_alert(handle)
return self

def handle_alert(self, handle: bool):
# 切换到alert弹窗,根据参数判断是接受还是取消
alert = self._driver.switch_to.alert
if handle:
logger.info("确认删除")
alert.accept()
else:
logger.info("取消删除")
alert.dismiss()
return self

@allure.step("断言页面数据是否存在")
def get_undelete_data(self, name):
# 删除操作后,断言数据是否在页面存在
data = (By.XPATH, f"//*[@class='subject']/a[text()='{name}']")
try:
self.find(*data)
logger.info("数据未删除")
except NoSuchElementException:
return False
return True

@allure.step("断言创建后的issue信息")
def assert_page_information(self):
# 断言页面信息
_title = (By.CSS_SELECTOR, ".subject h3")
_status = (By.CSS_SELECTOR, ".status.attribute>div.value")
_start_time = (By.CSS_SELECTOR, ".start-date.attribute>div.value")
_priority = (By.CSS_SELECTOR, ".priority.attribute>div.value")
_assigned = (By.CSS_SELECTOR, ".assigned-to.attribute>div.value")
# 计划完成日期
_due_time = (By.CSS_SELECTOR, ".due-date.attribute>div.value")
# 完成百分比
_percentage = (By.CSS_SELECTOR, ".progress.attribute p.percent")
# 预期时间
_expected_time = (By.CSS_SELECTOR, ".estimated-hours.attribute>div.value")
page_information = {'title': self.get_text(*_title),
'status': self.get_text(*_status),
'start_time': self.get_text(*_start_time),
'priority': self.get_text(*_priority),
'due_time': self.get_text(*_due_time),
'assigned': self.get_text(*_assigned),
'percentage': self.get_text(*_percentage),
'expected_time': self.get_text(*_expected_time)}
return page_information

@allure.step("获取页面展示的文件信息")
def get_file_message(self):
_file_name = (By.CSS_SELECTOR, "a.icon.icon-attachment")
return self.get_text(*_file_name)


(929-929/982)