from selenium.common import TimeoutException
|
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 TimeoutException:
|
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 TimeoutException:
|
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)
|