def create_peer_or_next_group(self, group_name=None, parent_name="Default", is_peer=True, is_confirm=True): """ 创建同级/下一级分组 :param group_name: 当前需要创建的分组名 :param parent_name: 通过哪个父级分组来创建,默认通过Default分组创建 :param is_peer: 创建同级/下一级,默认同级 """ if is_peer: """ 如果创建同级,先点击分组名,然后滑动该分组进行menu菜单的选择和点击""" GroupTreePage(self.driver).click_group_by_name(parent_name) GroupTreePage(self.driver).click_menu_name_by_move_icon(parent_name, menu_name="创建同级") if is_confirm: # 通过dialog对话框 - 创建同级 DialogPage(self.driver).create_group_by_dialog_title_name(loc_by_til="创建同级", group_name=group_name) else: DialogPage(self.driver).create_group_by_dialog_title_name(loc_by_til="创建同级", group_name=group_name, is_confirm=False) else: """ 否则创建下一级,先点击父级分组名,然后滑动该分组进行menu菜单的选择和点击""" GroupTreePage(self.driver).click_group_by_name(parent_name) # 滑动到icon并选择创建下一级分组 GroupTreePage(self.driver).click_menu_name_by_move_icon(parent_name, menu_name="创建下一级") if is_confirm: # 通过dialog对话框 - 创建下一级 DialogPage(self.driver).create_group_by_dialog_title_name(loc_by_til="创建下一级", group_name=group_name) else: DialogPage(self.driver).create_group_by_dialog_title_name(loc_by_til="创建下一级", group_name=group_name, is_confirm=False)
def delete_peer_or_next_group_by_name(self, module_val, group_name=None, parent_name="Default", is_peer=True, is_delete=True): """ 通过组名称删除分组 :param module_val: 指定删除操作的模块名 - 由于前端页面元素标签定位不同 :param group_name: 子级分组 :param parent_name: 父级分组 :param is_peer: 判断删除父级/子级分组,默认删除父级 :param is_delete: 判断点击删除还是取消按钮,默认删除 """ if is_peer: # 点击分组名 GroupTreePage(self.driver).click_group_by_name(parent_name) # 滑动到icon并点击删除 GroupTreePage(self.driver).click_menu_name_by_move_icon(parent_name, "删除") else: # 点击父级分组,出现子级分组列表 GroupTreePage(self.driver).click_group_by_name(group_name=parent_name) # 点击子级分组 GroupTreePage(self.driver).click_group_by_name(group_name=group_name) # 滑动到icon并点击删除 GroupTreePage(self.driver).click_menu_name_by_move_icon(group_name, "删除") if is_delete: # 点击删除按钮 DialogPage(self.driver).is_delete_or_cancel(module_val) else: # 点击取消按钮 DialogPage(self.driver).is_delete_or_cancel(module_val, is_delete=False)
def add_task_by_type(self, task, task_type, is_confirm=True): # 点击任务左侧菜单 self.click_left_menu(menu_name=task_type) # 点击添加任务按钮 self.click_add_task_btn() # 选择任务类型 - 通过选择延长下面列表的加载时间 self.select_task_type(task_type=task_type) # 点击了左侧的任务列表,此处会默认选中当前任务 """ 开始添加任务界面的基础共用操作:任务名称、设备名称、设备分组,选择特殊属性 """ self.task_basic_set(task) if task_type == "车辆-违停检测任务": # 设置违停时限 self.input_park_time() # 绘制违停区域 self.draw_park_region() elif task_type == "人体-区域闯入检测任务": # 绘制违停区域 self.draw_park_region() elif task_type == "人体-越线检测任务": # 绘制告警线 self.draw_park_region(default="line") # 点击确认或取消按钮 if is_confirm: DialogPage(self.driver).is_confirm_or_cancel("添加任务") else: DialogPage(self.driver).is_confirm_or_cancel("添加任务", is_confirm=False)
def add_device_by_type(self, device, device_type, is_confirm=True): """ 通过指定类型来添加不同的设备 :param device: 设备实例 :param device_type: 设备类型,默认为网络摄像机,可选人脸识别机(后)、人脸抓拍机、身份验证一体机、人脸识别机(前) :param is_confirm: 是否确认,默认为确认 """ # 点击添加设备按钮 self.click_add_device_btn() # 选择设备类型 self.select_device_type(device_type=device_type) """ 开始添加设备界面的基础共用操作:设备名称、设备id、设备分组,指定地图分组,给设备标注点位 """ self.device_basic_set(device) if device_type == "网络摄像机": # 选择camera的类型,有RTSP和ONVIF两种类型 self.select_camera_type() if isinstance(device, Rtsp): # 输入rtsp的地址 self.input_rtsp_address(device.rtsp_address) """ 编码类型和传输协议使用默认 """ # elif isinstance(device, ONVIF): elif isinstance(device, Rtsp): pass elif type == "人脸识别机(前)": pass elif type == '人脸抓拍机': pass # 点击确定或取消按钮 if is_confirm: DialogPage(self.driver).is_confirm_or_cancel("添加设备") else: DialogPage(self.driver).is_confirm_or_cancel("添加设备", is_confirm)
def delete_or_rename_timezone_name(self, timezone_name, flag="删除"): """ 删除时间条件 """ # 定位到当前时间条件名称 SELECT_TIMEZONE = ( By.XPATH, f'//div[@role="tablist"]//button/span[contains(text(), "{timezone_name}")]' ) BasePage(self.driver).mouse_move_ele(SELECT_TIMEZONE) if flag == "重命名": # TODO ELE_LOC = ( By.XPATH, '//div[@role="tooltip" and contains(@style, "position")]//span[contains(text(), "重命名")]' ) BasePage(self.driver).mouse_move_ele_and_click( SELECT_TIMEZONE, ELE_LOC) # 执行重命名操作 self.dialog_info_com("重命名时间条件", "UPDATE" + timezone_name) elif flag == "删除": # 定位到 "删除" 元素 ELE_LOC = ( By.XPATH, '//div[@role="tooltip" and contains(@style, "position")]//span[contains(text(), "删除")]' ) time.sleep(2) BasePage(self.driver).mouse_move_ele_and_click( SELECT_TIMEZONE, ELE_LOC) # 执行删除操作 DialogPage(self.driver).is_delete_or_cancel(module_val="timezone")
def verify_pedestrians_not_null(self): """ 点击添加任务,点击确认,进行人体区域入侵的非空校验""" # 点击左侧菜单 self.click_left_menu("人体-区域闯入检测任务") # 点击添加任务 self.click_add_task_btn() DialogPage(self.driver).is_confirm_or_cancel(loc_by_til="添加任务")
def verify_parked_vehicle_not_null(self): """ 点击添加任务,点击确认,进行车辆违停的非空校验""" # 点击左侧菜单 self.click_left_menu("车辆-违停检测任务") # 点击添加任务 self.click_add_task_btn() DialogPage(self.driver).is_confirm_or_cancel(loc_by_til="添加任务")
def operations_table_list(self, name, flag): """ 定位列表项的相关操作,有:查看、编辑、删除 """ # 定位查看icon VIEW_ICON = ( By.XPATH, f'//table[@class="el-table__body"]//div[@class="cell" and text() = "{name}"]/parent::td/following-sibling::td[contains(@class, "tables-operate")]//i[contains(@class, "icon-view")]' ) # 定位编辑icon EDIT_ICON = ( By.XPATH, f'//table[@class="el-table__body"]//div[@class="cell" and text() = "{name}"]/parent::td/following-sibling::td[contains(@class, "tables-operate")]//i[contains(@class, "icon-edit")]' ) # 定位删除icon DELETE_ICON = ( By.XPATH, f'//table[@class="el-table__body"]//div[@class="cell" and text() = "{name}"]/parent::td/following-sibling::td[contains(@class, "tables-operate")]//i[contains(@class, "icon-delete")]' ) # 点击查看、 编辑、删除icon if flag == "view": BasePage(self.driver).click_ele(VIEW_ICON) elif flag == "edit": BasePage(self.driver).click_ele(EDIT_ICON) elif flag == "delete": BasePage(self.driver).click_ele(DELETE_ICON) # 进行弹框删除操作 DialogPage(self.driver).operation_dialog_btn(btn_text="删除")
def task_batch_operation(self, flag, text="确定"): # 点击批量操作按钮 self.click_batch_operation_btn() # 全选操作 self.check_all() if flag == "disabled": # 点击批量禁用按钮 self.crumbs_btn_opreration(btn_text="批量禁用") elif flag == "start": # 点击批量启用按钮 self.crumbs_btn_opreration(btn_text="批量启用") elif flag == "delete": # 点击批量删除按钮 # self.crumbs_btn_opreration(btn_text="批量删除") """ 针对批量删除操作 """ try: # BTN = (By.XPATH, # '//div[@class="el-table__header-wrapper"]//div[text()="任务名称"]/parent::th/preceding-sibling::th//span[contains(@class, "el-checkbox__input") and contains(@class, "is-disabled")]') # WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(BTN)) # 获取当前表格中的任务列表是否为空 LIST_TAB = ( By.XPATH, '//div[contains(@class, "el-table__body-wrapper")]//tbody//tr' ) # 如果全选按钮处于不可点击状态,则说明当前页面的列表为空 WebDriverWait(self.driver, 10).until( EC.presence_of_element_located(LIST_TAB)) except: # 删除 print("当前任务列表为空,不能进行批量删除操作!") else: # 如果能定位到任务列表,则进行任务列表的批量删除操作 self.crumbs_btn_opreration(btn_text="批量删除") if text == "确定": # dialog窗口 - 确定状态的修改 DialogPage(self.driver).operation_dialog_btn() elif text == "取消": # dialog窗口 - 取消状态的修改 DialogPage(self.driver).operation_dialog_btn(btn_text="取消") elif text == "删除": # dialog窗口 - 批量删除 DialogPage(self.driver).operation_dialog_btn(btn_text="删除")
def table_list_switch(self, name): """ table_list 列表状态开关,如任务的启用/禁用 """ # 定位开关操作 SWITCH_BTN = ( By.XPATH, f'//div[@class="cell" and text()="{name}"]/parent::td/following-sibling::td//div[contains(@class, "el-switch")]' ) BasePage(self.driver).click_ele(SWITCH_BTN) # 在弹框中确定点击按钮 - 修改状态 DialogPage(self.driver).operation_dialog_btn()
def delete_or_rename_holidays_or_workday(self, name, flag="删除"): """ 删除假期或特殊工作日 """ # 定位到当前假期或特殊工作日 SELECT_TIMEZONE = (By.XPATH, f'//span[text()="{name}"]/ancestor::tr') BasePage(self.driver).mouse_move_ele(SELECT_TIMEZONE) if flag == "重命名": # TODO ELE_LOC = ( By.XPATH, '//div[@class="timezone-left-popper"]//span[contains(text(), "重命名")]' ) elif flag == "删除": # 定位到 "删除" 元素 ELE_LOC = ( By.XPATH, '//div[@class="timezone-left-popper"]//span[contains(text(), "删除")]' ) BasePage(self.driver).mouse_move_ele_and_click( SELECT_TIMEZONE, ELE_LOC) # 执行删除操作 DialogPage(self.driver).is_delete_or_cancel(module_val="timezone")
def close_dialog(login): # 关闭dialog yield DialogPage(login).close_dialog()
def task_no_setup(login): MenuBarPage(login).click_nav_item("配置", "任务管理") yield login DialogPage(login).close_dialog()