basepage封装的目的
为了运行脚本过程中,可以捕捉失败异常生成日志,优化 PageObjects的封装的功能,下面涉及等待、元素定位、输入文本、点击这些基本的操作进行封装。
# coding=utf-8
from time import sleep
from Common.Logger import Logger
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
"""
@基类:工具类,将常用的/与项目适配的相关函数,进行二次封装,变成自定义内容,便于测试调用
存在的意义就是为了让页面对象类进行继承,从而获得基本的方法来实现页面的操作流程
@常用项:
访问url
元素定位
输入
点击
退出
等待
"""
# 创建基类
class BasePage(object):
# driver = webdriver.Chrome()
loggers = Logger().getLogger() # 日志输出
# 构造函数
def __init__(self, driver):
self.url = 'xxxx'
self.driver = driver
self.driver.maximize_window() #设置窗口最大化
self.driver.implicitly_wait(10) # 设置隐式等待
# 访问url
def open(self, url):
self.driver.get(url)
# 重写元素定位方法
def find_element(self, *loc, timeout=5, frequency=0.5):
"""
:param loc: 元素定位
:param timeout: 等待时间
:param frequency: 等待时间间隔
:return:
"""
try:
WebDriverWait(self.driver, timeout, frequency).until(EC.visibility_of_element_located(loc))
return self.driver.find_element(*loc)
except:
self.loggers.info(u"%s 页面中未能找到 %s 元素" % (self, loc))
# 重写定义send_keys方法
def send_keys(self, *loc, text):
"""
:param loc: 元素定位
:param text: 输入值
:return:
"""
el = self.driver.find_element(*loc)
try:
el.send_keys(text)
self.loggers.info("Had type \' %s \' in inputBox" % text)
except:
self.loggers.info("元素输入文本失败!")
# 清除文本框
def clear(self, *loc):
"""
:param loc: 元素定位
:return:
"""
el = self.driver.find_element(*loc)
try:
el.clear()
self.loggers.info("Clear text in input box before typing.")
except:
self.loggers.info("元素清除文本失败!")
# 点击元素
def click(self, *loc):
"""
:param loc: 元素定位
:return:
"""
el = self.driver.find_element(*loc)
try:
el.click()
self.loggers.info("The element \'%s\' was clicked." % el.text)
except:
self.loggers.info("点击元素失败!")
# 等待
def wait(self, time_):
sleep(time_)
# 退出
def quit(self):
self.driver.quit()
# 获取文本的值
def get_text(self, *loc):
"""
:param loc: 元素定位
:return:
"""
return self.driver.find_element(*loc).text
# 获取 alert 弹出框的文本信息
def get_alert_text(self):
"""
获取 alert 弹出框的文本信息
:return: String
"""
return self.driver.switch_to.alert.text
basepage.py文件中初始化函数和封装基础函数,在封装基础函数的同时,将异常捕获、日志信息等操作都封装到了自定义的函数中,调用后不用再对函数进行异常捕获,使用起来比较方便、简介、结构清晰、出现问题容易查找问题等