使用SeleniumBase简化Web自动化测试:从入门到实战

简介

SeleniumBase是一个Python框架,用于浏览器自动化和测试。它基于Selenium/WebDriver API,并整合了pytest、pynose和behave等测试运行器,提供了有序的结构、测试发现、测试执行、测试状态(如通过、失败或跳过)以及用于更改默认设置的命令行选项。

在这里插入图片描述

为什么选择SeleniumBase?

** 原生Selenium的痛点**

需要手动管理浏览器驱动
缺乏内置的等待机制导致Flaky Tests
复杂的页面交互代码冗长
测试报告需要额外配置

SeleniumBase的核心优势

零配置启动:自动下载浏览器驱动
智能等待:自动处理元素加载等待
增强型API:简化常见操作语法
多框架支持:兼容pytest和unittest
可视化报告:自动生成HTML/PDF报告
移动端支持:内置Appium集成

环境搭建与快速入门

安装SeleniumBase

pip install seleniumbase

第一个测试用例

from seleniumbase import BaseCase

class MyTestClass(BaseCase):
    def test_basic(self):
        self.open("https://www.example.com")
        self.assert_title("Example Domain")
        self.assert_text("Example")
        self.click('a:contains("More information")')

运行测试

pytest test_demo.py --browser=chrome

核心API详解

元素定位增强

# CSS选择器增强
self.click("div#login > button.submit")

# XPath简写
self.type('//input[@name="username"]', "testuser")

# 文本定位
self.click("Submit Form")  # 自动匹配按钮文本

# 链式调用
self.assert_element("h1").assert_text("Welcome!")

表单操作

# 输入文本
self.type("#email", "user@example.com")

# 文件上传
self.choose_file("#file-upload", "test_data.csv")

# 下拉选择
self.select_option_by_text("#country", "China")

# 多表单提交
self.add_text("#comments", "Special requirements")
self.check_if_unchecked("#terms")
self.hover_and_click("#tooltip", "#submit")

智能等待机制

# 显式等待元素可见
self.wait_for_element_visible("#results")

# 等待文本出现
self.wait_for_text("Order Complete", timeout=15)

# 自定义等待条件
def page_loaded(driver):
    return driver.execute_script("return document.readyState") == "complete"
self.wait_for(page_loaded)

页面断言

self.assert_url("https://checkout.example.com")
self.assert_element_present('img[alt="Success"]')
self.assert_exact_text("Total: $299.00", "#total-price")
self.assert_attribute("#progress-bar", "value", "100")

高级功能实战

并行测试配置

# pytest.ini配置
[pytest]
addopts = --numprocesses=4 --dist=loadscope

跨浏览器测试

pytest test_suite.py --browser=firefox
pytest test_suite.py --browser=safari --user-agent="Mobile"

移动端测试

def test_mobile(self):
    self.open("https://m.example.com")
    self.swipe(100, 500, 100, 100)  # 滑动操作
    self.device_rotation(90)  # 横屏模式

测试报告生成

pytest test_suite.py --html=report.html

最佳实践

Page Object模式优化

class LoginPage:
    USERNAME = "#username"
    PASSWORD = "#password"
    SUBMIT = "#submit"

    def __init__(self, sb):
        self.sb = sb
    
    def login(self, user, pwd):
        self.sb.type(self.USERNAME, user)
        self.sb.type(self.PASSWORD, pwd)
        self.sb.click(self.SUBMIT)

class TestLogin(BaseCase):
    def test_login(self):
        login_page = LoginPage(self)
        login_page.login("admin", "secure@123")

失败自动重试

pytest --reruns 2 --reruns-delay 5

性能监控

def test_performance(self):
    metrics = self.get_metrics()
    self.assert_less(metrics["load_time"], 2000)  # 页面加载时间<2s
    self.assert_less(metrics["network_requests"], 30)

常见问题解决方案

处理验证码

self.execute_script("document.getElementById('captcha').value = '1234'")

文件下载测试

self.download_file("#export-btn", "report.pdf")
self.assert_downloaded_file("report.pdf")

Shadow DOM操作

shadow_host = self.find_element("div#shadow-host")
shadow_root = self.get_shadow_root(shadow_host)
self.type(shadow_root, "input#name", "Test User")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值