from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class BasePage: # 初始化方法 def __init__(self, driver): self.driver = driver # 元素定位 def get_element(self, locator): return self.driver.find_element(*locator) # 多个元素定位 def get_elements(self, locator): return self.driver.find_elements(*locator) # 多个元素定位 def get_elements_wait(self, locator): wait = WebDriverWait(self.driver, 10, 0.5) wait.until(EC.presence_of_element_located(locator)) return self.driver.find_elements(*locator) # 在指定元素中定位元素 def get_element_in(self, element, locator): return element.find_element(*locator) # 在指定元素中定位多个元素 def get_elements_in(self, element, *locator): return element.find_elements(*locator) # 元素定位 def get_element_wait(self, locator): wait = WebDriverWait(self.driver, 10, 0.5) wait.until(EC.presence_of_element_located(locator)) return self.driver.find_element(*locator) # 使用js语句点击 def script_click(self, *locator): item = self.get_element(*locator) self.driver.execute_script("arguments[0].click();", item) def script_click_wait(self, *locator): item = self.get_element_wait(*locator) self.driver.execute_script("arguments[0].click();", item) # 点击 def click(self, locator): """ 点击元素 :param locator: 元素定位 :return: """ self.get_element(locator).click() def click_wait(self, *locator): self.get_element_wait(*locator).click() # 输入 def send_text(self, text, locator): """ 输入内容 :param text: 内容 :param locator: 元素定位 :return: """ self.get_element(locator).send_keys(text) def send_text_wait(self, text, *locator): self.get_element_wait(*locator).send_keys(text) # JavaScript获取元素值 def get_input_value_js(self, locator): input_box = self.get_element(locator) input_value = self.driver.execute_script("return arguments[0].value", input_box) return input_value def get_input_value_js_wait(self, *locator): input_box = self.get_element_wait(*locator) input_value = self.driver.execute_script("return arguments[0].value", input_box) return input_value # 清除 def clear_text(self, *locator): self.get_element(*locator).clear() def clear_text_wait(self, *locator): self.get_element_wait(*locator).clear() # 表单切换 def switch_iframe(self, locator): self.driver.switch_to.frame(self.get_element(locator)) # 切换到上一层的iframe def switch_parent_iframe(self): self.driver.switch_to.parent_frame() def switch_iframe_wait(self, locator): self.driver.switch_to.frame(self.get_element_wait(locator)) # 窗口切换 def switch_window(self, n): self.driver.switch_to.window(self.driver.window_handles[n]) # 检查元素是否可见可点击 def check_clickable(self, *locator): wait = WebDriverWait(self.driver, 10, 0.5) try: e = wait.until(EC.element_to_be_clickable(locator)) if e is not None: return True except: pass return False # 等待元素出现 def wait_appear(self, *locator): wait = WebDriverWait(self.driver, 10, 0.5) try: e = wait.until(EC.presence_of_element_located(locator)) if e is not None: return True except: pass return False # 滑动页面 def scroll_by(self, num): self.driver.execute_script("window.scrollBy(0, " + num + ");") # 滑动到底部 def scroll_to_bottom(self): self.driver.execute_script("window.scrollBy(0,document.body.scrollHeight);") # 滑动到顶部 def scroll_to_top(self): self.driver.execute_script("window.scrollBy(0,0);") # 截取当前窗口保存为图片 def get_png(self): """截取当前窗口保存为图片""" return self.driver.get_screenshot_as_png() def open_new_table_to_url(self, url): """ 打开一个新的标签页,并跳转到指定的url :return: """ # 打开新标签页 self.driver.execute_script("window.open()") # 切换到新的标签页 self.switch_window(-1) # 在新标签页中加载指定url self.driver.get(url)