【Web UI自动化测试】base基类代码

1483 篇文章 70 订阅
1438 篇文章 114 订阅

本文大纲截图:

 操作层(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日志信息")

自动化测试学习视频

面试资料

我们学习软件测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….

加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。
未来的你肯定会感谢现在拼命的自己!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值