from base.base_page import BasePage from selenium.webdriver.common.by import By from elements.home_elements import HomeElements import time class HomePage(BasePage): """ 主页面侧边栏菜单与tab栏操作页面 """ es = HomeElements def __init__(self, driver): super().__init__(driver) self.driver = driver # 切换到最顶层的文档 driver.switch_to.default_content() def logout(self): # 点击第三个用户菜单 self.click(self.es.user_menu_3) # 点击登出 self.click(self.es.logout_btn) def menu_select(self, menu_text, is_first=True): """ 选择菜单 :param menu_text: 菜单选项内容,使用 / 分隔上下级菜单 :param is_first: 是否为一级菜单,默认为True :return: """ # 判断menu_text是否包含/ if "/" in menu_text: # 包含 / 获取到第一个/前的菜单选项 # 获取/第一次出现的位置 index = menu_text.find("/") # 截取要点击的菜单选项 menu = menu_text[0:index] else: menu = menu_text # 判断是否一级菜单 if is_first: # 菜单元素定位 menu_loc = (By.XPATH, "//ul[@id='side-menu']//span[text()='" + menu + "']") # 菜单下ul定位 menu_ul_loc = (By.XPATH, "//ul[@id='side-menu']//span[text()='" + menu + "']/../../ul") # 获取到ul元素 ul = self.get_ele(menu_ul_loc) # 获取ul的class属性 ul_class = ul.get_attribute("class") # 判断class是否包含in字符串 if "in" not in ul_class: # 不包含则为未打开状态,可以点击 self.click(menu_loc, timeout=10) else: # 菜单元素定位 menu_loc = (By.XPATH, "//ul[@id='side-menu']//a[text()='" + menu + "']") # 判断menu_text是否还包含/ if "/" in menu_text: # 包含则表示还有下级菜单,判断下级菜单是否为展开状态 # 菜单下ul定位 menu_ul_loc = (By.XPATH, "//ul[@id='side-menu']//a[text()='" + menu + "']/../ul") # 获取到ul元素 ul = self.get_ele(menu_ul_loc) # 获取ul的class属性 ul_class = ul.get_attribute("class") # 判断class是否包含in字符串 if "in" not in ul_class: # 不包含则为未打开状态,可以点击 self.click(menu_loc, timeout=10) else: self.click(menu_loc, timeout=10) if "/" in menu_text: # 获取/第一次出现的位置 index = menu_text.find("/") # 截取剩余的菜单内容 menu_text = menu_text[index + 1: len(menu_text)] # 递归调用 self.menu_select(menu_text, False) def close_tab(self, tab_name): """关闭页面tab""" # 获取所有tab tabs = self.get_eles(self.es.nav_tabs) for tab in tabs: if tab.text == tab_name: # 点击关闭图标 tab.find_element(By.XPATH, "i").click()