image

编辑人: 流年絮语

calendar2025-09-16

message3

visits113

冲刺阶段第 5-6 个月:Selenium 封装 - 编写自定义 WebDriver 工具类(含元素等待 / 截图 / 日志记录通用方法)

在软件测试领域,Selenium 是一个非常流行的自动化测试工具,尤其在 Web 应用的自动化测试中占据重要地位。随着测试需求的不断复杂化,对 Selenium 的使用也提出了更高的要求。本文将详细介绍如何在冲刺阶段的第 5-6 个月进行 Selenium 的封装,编写一个包含元素等待、截图和日志记录通用方法的自定义 WebDriver 工具类。

一、Selenium 封装的意义

封装是指将一些常用的操作和功能进行整理和统一管理,以便在测试过程中能够更加便捷地调用。对于 Selenium 来说,封装 WebDriver 可以提高代码的复用性和可维护性,减少重复代码,提升测试效率。

二、自定义 WebDriver 工具类的编写

1. 元素等待

在自动化测试中,页面元素的加载时间往往是不确定的,因此需要使用元素等待来确保元素在操作之前已经加载完毕。常见的元素等待方法包括显式等待和隐式等待。

显式等待

显式等待是指明确指定等待某个条件成立,然后再继续执行后续操作。常用的显式等待方法有 WebDriverWaitExpectedConditions

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def wait_for_element(driver, by, value, timeout=10):
    return WebDriverWait(driver, timeout).until(
        EC.presence_of_element_located((by, value))
    )

隐式等待

隐式等待是指设置一个全局的等待时间,在这个时间内,WebDriver 会不断尝试查找元素,直到找到为止或超时。

driver.implicitly_wait(10)

2. 截图

在测试过程中,截图可以帮助我们记录测试结果,尤其是在出现异常时,截图可以提供直观的证据。Selenium 提供了 save_screenshot 方法来实现截图功能。

import os

def take_screenshot(driver, name):
    screenshot_dir = "screenshots"
    if not os.path.exists(screenshot_dir):
        os.makedirs(screenshot_dir)
    screenshot_path = os.path.join(screenshot_dir, f"{name}.png")
    driver.save_screenshot(screenshot_path)
    return screenshot_path

3. 日志记录

日志记录可以帮助我们追踪测试过程中的详细信息,便于调试和分析问题。Python 的 logging 模块提供了强大的日志记录功能。

import logging

def setup_logger(name, log_file, level=logging.INFO):
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
    handler = logging.FileHandler(log_file)        
    handler.setFormatter(formatter)

    logger = logging.getLogger(name)
    logger.setLevel(level)
    logger.addHandler(handler)

    return logger

logger = setup_logger('selenium_test', 'test.log')
logger.info('Test started')

三、封装后的 WebDriver 工具类示例

以下是一个封装后的 WebDriver 工具类的示例,包含了元素等待、截图和日志记录的通用方法:

class CustomWebDriver:
    def __init__(self, driver):
        self.driver = driver
        self.logger = setup_logger('selenium_test', 'test.log')

    def wait_for_element(self, by, value, timeout=10):
        self.logger.info(f"Waiting for element {by}={value}")
        return WebDriverWait(self.driver, timeout).until(
            EC.presence_of_element_located((by, value))
        )

    def take_screenshot(self, name):
        self.logger.info(f"Taking screenshot: {name}")
        return take_screenshot(self.driver, name)

    def find_element(self, by, value):
        self.logger.info(f"Finding element {by}={value}")
        return self.driver.find_element(by, value)

    def find_elements(self, by, value):
        self.logger.info(f"Finding elements {by}={value}")
        return self.driver.find_elements(by, value)

四、总结

通过对 Selenium 的封装,编写自定义的 WebDriver 工具类,可以大大提高测试代码的可维护性和复用性。元素等待、截图和日志记录是自动化测试中常用的功能,合理地使用这些功能可以有效提升测试的可靠性和可调试性。在冲刺阶段的第 5-6 个月,掌握这些技能将为你的软件评测师备考之路增添一份有力的保障。

通过本文的学习,相信你已经掌握了如何编写一个包含元素等待、截图和日志记录通用方法的自定义 WebDriver 工具类。希望这些内容能对你的备考有所帮助,祝你考试顺利!

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:冲刺阶段第 5-6 个月:Selenium 封装 - 编写自定义 WebDriver 工具类(含元素等待 / 截图 / 日志记录通用方法)

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share