web自动化脚本中有一部分代码是可以借鉴的,我们只需要将这个框架移植到当前项目中,修改部分参数即可。比如日志类、driver对象、元素基本操作等。
以商城项目为例,以下就是相关代码。
base包(内含日志、driver对象、页面元素操作):
页面元素操作(base.py):
import time
from time import sleep
import page
from selenium.webdriver.support.wait import WebDriverWait
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):
# 获取元素
el = self.base_find(loc)
# 清空
log.info("[base]: 正在对:{} 元素实行清空".format(loc))
el.clear()
# 输入
el.send_keys(value)
# 获取文本信息 方法封装
def base_get_text(self, loc):
log.info("[base]: 正在获取:{} 元素文本值".format(loc))
return self.base_find(loc).text
# 截图 方法封装
def base_get_image(self):
log.info("[base]: 断言出错,调用截图")
self.driver.get_screenshot_as_file("../image/{}.png".format(time.strftime("%Y_%m_%d %H_%M_%S")))
# 判断元素是否存在 方法封装
def base_element_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):
sleep(2)
self.driver.get(page.URL)
# 切换frame表单方法
def base_switch_frame(self, name):
self.driver.switch_to.frame(name)
# 回到默认目录方法
def base_default_content(self):
self.driver.switch_to.default_content()
# 切换窗口 方法 调用此方法
def base_switch_to_window(self, title):
log.info("正在执行切换title值为:{}窗口 ".format(title))
self.driver.switch_to.window(self.base_get_title_handle(title))
# 获取指定title页面的handle方法
def base_get_title_handle(self, title):
# 获取当前页面所有的handles
for handle in self.driver.window_handles:
log.info("正在遍历handles:{}-->{}".format(handle, self.driver.window_handles))
# 切换 handle
self.driver.switch_to.window(handle)
log.info("切换 :{} 窗口".format(handle))
# 获取当前页面title 并判断 是否等于 指定参数title
log.info("判断当前页面title:{} 是否等于指定的title:{}".format(self.driver.title, title))
if self.driver.title == title:
log.info("条件成立! 返回当前handle{}".format(handle))
# 返回 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:
# 获取driver
cls.driver = webdriver.Firefox()
# 最大化浏览器
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()
日志对象(get_logger.py):
import logging.handlers
class GetLogger:
logger = None
# 在最外侧运行
# filename = "./log/xxxx.log"
# 获取 logger
@classmethod
def get_logger(cls):
# 如果 logger为空
if cls.logger is None:
# 获取日志器
cls.logger = logging.getLogger()
# 设置日志器默认级别
cls.logger.setLevel(logging.INFO)
# 获取处理器 控制台
sh = logging.StreamHandler()
# 获取处理 文件(时间)
th = logging.handlers.TimedRotatingFileHandler(filename="../log/xxxx.log",
when="midnight",
interval=1,
backupCount=30,
encoding="utf-8")
# 获取格式器
fm = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
fmt = logging.Formatter(fm)
# 将格式器 设置 处理器中
sh.setFormatter(fmt)
th.setFormatter(fmt)
# 将处理器 添加到 日志器中
cls.logger.addHandler(sh)
cls.logger.addHandler(th)
# 返回 日志器
return cls.logger
定义测试套件(run_main.py直接放在项目目录下):
# 导包
import unittest
import time
from tool.HTMLTestRunner import HTMLTestRunner
# 定义测试套件 在scripts中 运行
# suite = unittest.defaultTestLoader.discover("./")
# 在最外侧运行
suite = unittest.defaultTestLoader.discover("./scripts")
# 报告生成目录及文件名称
dir_path = "./report/{}.html".format(time.strftime("%Y_%m_%d %H_%M_%S"))
# 获取文件流并调用run运行
with open(dir_path, "wb") as f:
HTMLTestRunner(stream=f, title="Tpshop商城自动化测试报告", description="操作系统:win7").run(suite)
在工具包(tools)中存放HTMLTestRunner.py文件
以上就是Python语言web自动化脚本常用的代码,按需使用。
原文地址:https://www.cnblogs.com/ray-mr-huang/p/11526426.html