本文大纲截图:
操作层(base.py)
'''操作层的操作方法封装'''
import time
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
import page
from base.get_logger import GetLogger
# 获取log日志器
log = GetLogger().get_logger()
class Base:
def __init__(self, driver):
log.info("[base:]正在获取初始化driver对象:{}".format(driver))
self.driver = driver
# 查找元素方法 封装
def base_find(self, loc, timeout=30, poll=0.5):
log.info("[base]:正在定位:{}元素,默认定位超时时间为:{}".format(loc, timeout))
# 使用显式等待 查找元素
return WebDriverWait(self.driver,
timeout=timeout,
poll_frequency=poll).until(lambda x: x.find_element(*loc))
# 点击元素方法 封装
def base_click(self, loc):
log.info("[base]:正在对:{}元素执行点击事件".format(loc))
self.base_find(loc).click()
# 输入元素方法 封装
def base_input(self, loc, value):
log.info("[base]:正在获取:{}元素".format(loc))
# 获取元素
el = self.base_find(loc)
log.info("[base]:正在对:{}元素执行清空操作".format(loc))
# 输入前 清空
el.clear()
log.info("[base]:正在给{}元素输入内容:{}".format(loc, value))
# 输入
el.send_keys(value)
# 获取文本信息方法 封装
def base_get_text(self, loc):
log.info("[base]:正在获取{}元素文本值".format(loc))
return self.base_find(loc).text
# 截图方法 封装
def base_get_img(self):
log.info("[base]:断言出错,调用截图")
self.driver.get_screenshot_as_file("../image/{}.png".format(time.strftime("%Y_%m_%d %H_%M_%S")))
# 判断元素是否存在方法 封装
def base_elememt_is_exist(self, loc):
try:
self.base_find(loc, timeout=2)
log.info("[base]:{}元素查找成功,存在页面".format(loc))
return True # 代表元素存在
except:
log.info("[base]:{}元素查找失败,不存在当前页面".format(loc))
return False # 代表元素不存在
# 回到首页(购物车、下订单、支付)都需要用到此方法
def base_index(self):
# 暂停2秒
sleep(2)
log.info("[base]:正在打开首页")
self.driver.get(page.URL)
# 切到frame表单方法 以元素属性切换
def base_switch_frame(self, element):
log.info("[base]:正在切换到frame表单")
self.driver.switch_to.frame(element)
# 回到默认目录方法
def base_default_content(self):
log.info("[base]:正在返回默认目录")
self.driver.switch_to.default_content()
# 切换窗口方法
def base_switch_to_window(self, title):
log.info("正在执行切换title值为:{}窗口".format(title))
self.base_get_title_handle(title)
# self.driver.switch_to.window(self.base_get_title_handle(title))
# 获取指定title页面的handle方法
def base_get_title_handle(self, title):
# 获取当前页面所有的handles
handles = self.driver.window_handles
# 遍历handle
for handle in handles:
log.info("正在遍历handles:{}-->{}".format(handle, handles))
# 切换 handle
self.driver.switch_to.window(handle)
log.info("切换:{}窗口".format(handle))
# 获取当前页面title 并判断 是否等于 指定参数title
log.info("条件成立!返回当前handle{}".format(handle))
if self.driver.title == title:
# 返回 handle
return handle
单例模式获取driver(get_driver.py)
from selenium import webdriver
import page
class GetDriver:
driver = None
# 获取 driver
@classmethod
def get_driver(cls):
if cls.driver is None:
cls.driver = webdriver.Chrome()
# 最大化浏览器
cls.driver.maximize_window()
# 打开 url
cls.driver.get(page.URL)
# 返回 driver
return cls.driver
# 关闭 driver
@classmethod
def quit_driver(cls):
if cls.driver:
cls.driver.quit()
# 必须置空操作
cls.driver = None
if __name__ == '__main__':
GetDriver().quit_driver()
单例模式获取logger(get_logger.py)
import logging.handlers
import time
class GetLogger:
logger = None
# 获取logger
@classmethod
def get_logger(cls):
if cls.logger is None:
# 获取 logger 日志器 并设置名称为“admin”
cls.logger = logging.getLogger("admin")
# 设置日志级别
cls.logger.setLevel(logging.INFO)
# 获取 控制台处理器
sh = logging.StreamHandler()
# 获取 文件处理器 根据时间分割
th = logging.handlers.TimedRotatingFileHandler("../log/{}.log".format(time.strftime("%Y_%m_%d %H_%M_%S")),
when="S",
interval=1,
backupCount=3,
encoding="utf-8")
# 设置 文件处理器 日志级别
th.setLevel(logging.ERROR)
# 获取 格式器
fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s %(funcName)s %(lineno)d] - %(message)s"
fm = logging.Formatter(fmt)
# 将 格式器 添加到 处理器
sh.setFormatter(fm)
th.setFormatter(fm)
# 将 处理器 添加到 日志器
cls.logger.addHandler(sh)
cls.logger.addHandler(th)
# 返回日志器
return cls.logger
if __name__ == '__main__':
logger = GetLogger.get_logger()
# 日志器应用
logger.info("这是info日志信息")
logger.debug("这是debug日志信息")
logger.warning("这是warning日志信息")
logger.error("这是error日志信息")
自动化测试学习视频
面试资料
我们学习软件测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。
未来的你肯定会感谢现在拼命的自己!