UI自动化框架
basePage类
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
class Page(object):
methods = {
'css': By.CSS_SELECTOR,
'tag_name': By.TAG_NAME,
'link_text': By.LINK_TEXT,
'partial_link_text': By.PARTIAL_LINK_TEXT,
'class_name': By.CLASS_NAME,
'id': By.ID,
'xpath': By.XPATH,
'name': By.NAME,
}
def __init__(self, driver, timeout=20):
self.driver = driver
self.timeout = timeout
def wait(self, loaction, method):
'显示等待元素出现'
try:
WebDriverWait(self.driver, self.timeout).until(
EC.presence_of_element_located((self.methods[method], loaction))
)
except NoSuchElementException as e:
raise e
def setWindowSize(self, length, wide):
'设置窗口大小'
self.driver.set_window_size(length, wide)
def setMaxWindowSize(self):
'浏览器最大化'
self.driver.maximize_window()
def back(self):
'返回上一网页'
self.driver.back()
def forward(self):
'返回下一网页'
self.driver.forward()
def refresh(self):
'刷新当前网页'
self.driver.refresh()
def get(self, url):
'''
访问链接
:param url:
:return:
'''
self.setWindowSize(1200, 800)
self.driver.get(url)
def findElement(self, loaction, method):
'''
查找元素,返回单个元素
:param loaction:
:param method: 方式,包括:
{
'css': 'find_element_by_css_selector',
'tag_name': 'find_element_by_tag_name',
'link_text': 'find_element_by_link_text',
'partial_link_text': 'find_element_by_partial_link_text',
'class_name': 'find_element_by_class_name',
'id': 'find_element_by_id',
'xpath': 'find_element_by_xpath',
'name': 'find_element_by_name',
}
:return:
'''
way = self.methods[method]
self.wait(loaction, way)
return self.driver.find_element(way, loaction)
def input(self, text, *args, **kwargs):
'''
输入信息
:param *args: 输入框定位信息
:param text:待输入内容
:return:
'''
self.findElement(*args, **kwargs).send_keys(text)
def clear(self, *args, **kwargs):
'''
清空输入框内容
:param args:
:param kwargs:
:return:
'''
self.findElement(*args, **kwargs).clear()
def click(self, *args, **kwargs):
'''
点击操作
:param args:
:return:
'''
self.findElement(*args, **kwargs).click()
def moveToElement(self, *args, **kwargs):
'''
鼠标移动到元素
'''
element = self.findElement(*args, **kwargs)
ActionChains(self.driver).move_to_element(element).perform()
def doubleClick(self, *args, **kwargs):
'''
鼠标双击,如果无指定元素则双击鼠标当前位置
:param args:
:param kwargs:
:return:
'''
if args:
element = self.findElement(*args, **kwargs)
else:
element =None
ActionChains(self.driver).double_click(on_element=element)
def singleClick(self, *args, **kwargs):
'''
鼠标单击,如果无指定元素则单击鼠标当前位置
:param args:
:param kwargs:
:return:
'''
if args:
element = self.findElement(*args, **kwargs)
else:
element = None
ActionChains(self.driver).click(on_element=element)
def dragMouse(self, source, targe):
'''
拖拽元素source到target位置
:param source: 目标元素
:param targe: 目标位置
:return:
'''
ActionChains(self.driver).drag_and_drop(source=source, target=targe)
def clickAble(self, loaction, method):
try:
WebDriverWait(self.driver, self.timeout).until(
EC.element_to_be_clickable((self.methods[method], loaction))
)
except Exception as e:
raise e
if __name__ == '__main__':
browser = webdriver.Chrome()
p = Page(browser)
p.doubleClick()