''' utility 工具 ''' from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.select import Select from time import sleep class BoxDriver: def __init__(self,url,browser='Chrome'): ''' browser浏览器类型 ''' if browser == 'Chrome': self.driver = webdriver.Chrome() elif browser == 'Firefox': self.driver = webdriver.Firefox() elif browser == 'IE': self.driver = webdriver.IE() self.driver.implicitly_wait(10) self.driver.maximize_window() self.driver.get(url) def get(self, url): ''' url 网页地址 ''' self.driver.get(url) def maximize_window(self): ''' 窗口最大化 ''' self.driver.maximize_window() def minimize_window(self): ''' 窗口最小化 ''' self.driver.minimize_window() def wait(self,second): ''' 休眠 second 休眠时间,单位秒 ''' sleep(second) def webdriver_wait(self): ''' 显示等待 ''' def implicitly_wait(self,second=10): ''' 隐式等待 second 最大等待时间 ''' self.driver.implicitly_wait(second) def convert_selector_to_locator(self,selector): ''' 将自定义的定位方式转换为selenium的标准定位方式 'id account' --> By.ID, 'account' ''' # 定位方式 by = selector.split(' ')[0] # 分割字符串 # 定位值 value = selector.split(' ')[1] if by == 'id' or by == 'i': locator = (By.ID,value) elif by == 'name' or by == 'n': locator = (By.NAME, value) elif by == 'class' or by == 'c': locator = (By.CLASS_NAME, value) elif by == 'link_text' or by == 'l': locator = (By.LINK_TEXT, value) elif by == 'partial_link_text' or by == 'p': locator = (By.PARTIAL_LINK_TEXT, value) elif by == 'tag_name' or by == 't': locator = (By.TAG_NAME, value) elif by == 'xpath' or by == 'x': locator = (By.XPATH, value) elif by == 'css_selector' or by == 'css': locator = (By.CSS_SELECTOR, value) return locator def locate_element(self,selector): ''' 定位单个元素 selector 自定义定位方式 ''' locator = self.convert_selector_to_locator(selector) return self.driver.find_element(*locator) def locate_elements(self,selector): ''' 定位单个元素 selector 自定义定位方式 ''' locator = self.convert_selector_to_locator(selector) return self.driver.find_elements(*locator) def input(self,selector,keyword): ''' 向元素中写入文本 selector 自定义定位方式 keyword 要写入的文本 ''' self.locate_element(selector).send_keys(keyword) def click(self,selector): ''' 单击元素 selector 自定义定位方式 ''' self.locate_element(selector).click() def switch_to_frame(self,selector): ''' 进入frame selector 自定义定位方式 ''' iframe = self.locate_element(selector) self.driver.switch_to_frame(iframe) def select_by_index(self,selector,index): ''' 根据index选择 index 下标 selector 自定义定位方式 ''' select = self.locate_element(selector) options = Select(select) options.select_by_index(index) def select_by_value(self,selector,value): ''' 根据value选择 value value属性的值 selector 自定义定位方式 ''' select = self.locate_element(selector) options = Select(select) options.select_by_value(value) def select_by_visible_text(self,selector,text) 根据选择 text 文本的值 selector 自定义定位方式 ''' select = self.locate_element(selector) options = Select(select) options.select_by_visible_text(text) def quit(self): ''' 退出浏览器 ''' self.driver.quit() def close(self): ''' 关闭当前页 ''' self.driver.close() class BasePage: def __init__(self,driver:BoxDriver): self.driver = driver # class GetYaml: # def if __name__ == '__main__': BoxDriver()
|