web自动化脚本中有一部分代码是可以借鉴的,我们只需要将这个框架移植到当前项目中,修改部分参数即可。比如日志类、driver对象、元素基本操作等。
以商城项目为例,以下就是相关代码。
base包(内含日志、driver对象、页面元素操作):
页面元素操作(base.py):
import timefrom time import sleep import pagefrom selenium.webdriver.support.wait import WebDriverWaitfrom 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 webdriverimport 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 unittestimport timefrom 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
时间: 2024-10-01 02:36:56