Python语⾔web⾃动化通⽤脚本
web⾃动化脚本中有⼀部分代码是可以借鉴的,我们只需要将这个框架移植到当前项⽬中,修改部分参数即可。⽐如⽇志类、driver对象、元素基本操作等。
以商城项⽬为例,以下就是相关代码。
base包(内含⽇志、driver对象、页⾯元素操作):
页⾯元素操作(base.py):
import time
from time import sleep
import page
from selenium.webdriver.support.wait import WebDriverWait
_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]: 断⾔出错,调⽤截图")
_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)
(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
(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 = Logger()
# 设置⽇志器默认级别
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⾃动化脚本常⽤的代码,按需使⽤。