1. 项目概述
最近在帮团队搭建自动化测试框架时,发现很多同事对基于Python+Selenium+Edge的测试方案存在不少疑问。作为从2016年就开始使用Selenium的老鸟,今天就把这套组合拳的完整操作流程梳理出来,特别针对Edge浏览器的特性做了优化适配。不同于网上那些零散的教程,我会把环境配置、元素定位、异常处理等核心环节的坑都填平,让你用最新稳定版本来实现企业级测试自动化。
2. 环境准备
2.1 基础软件安装
首先需要确保以下组件就位:
- Python 3.8+(推荐3.10稳定版)
- Microsoft Edge浏览器(版本115+)
- Edge对应的WebDriver
具体安装步骤:
- 从Python官网下载安装包时,务必勾选"Add Python to PATH"
- Edge浏览器版本号查看:在地址栏输入
edge://settings/help - WebDriver下载地址需要与浏览器版本严格匹配,在[微软开发者门户]的WebDriver下载页面选择对应版本
重要提示:WebDriver与浏览器主版本号必须一致,比如Edge 115对应115.x.x.x的WebDriver
2.2 依赖库安装
在命令行执行:
pip install selenium==4.10.0 pip install webdriver-manager==3.8.6为什么选择这些版本:
- Selenium 4.x系列重构了部分API,比3.x更稳定
- webdriver-manager可以自动管理驱动版本,避免手动下载的麻烦
3. 核心测试框架搭建
3.1 基础测试类设计
建议采用Page Object模式设计基础结构:
from selenium import webdriver from selenium.webdriver.edge.service import Service from webdriver_manager.microsoft import EdgeChromiumDriverManager class BaseTest: @classmethod def setup_class(cls): cls.service = Service(EdgeChromiumDriverManager().install()) cls.driver = webdriver.Edge(service=cls.service) cls.driver.implicitly_wait(10) # 隐式等待 @classmethod def cleanup_class(cls): cls.driver.quit()3.2 元素定位最佳实践
Edge作为Chromium内核浏览器,推荐使用这些定位策略:
- 优先使用CSS Selector(性能最优)
- 复杂结构用XPath轴定位
- 动态ID使用部分匹配
# 示例:登录页面元素定位 login_page = { "username": ("css", "#userName"), "password": ("xpath", "//input[contains(@class,'pwd-input')]"), "submit": ("css", "button[type='submit']") } def input_credentials(user, pwd): for key, (strategy, locator) in login_page.items(): elem = driver.find_element(strategy, locator) elem.clear() elem.send_keys(user if key == "username" else pwd)4. 高级测试技巧
4.1 处理Edge特有弹窗
Edge浏览器会有自己的通知弹窗,需要特殊处理:
# 禁用Edge通知 edge_options = webdriver.EdgeOptions() edge_options.add_argument("--disable-notifications") driver = webdriver.Edge(options=edge_options) # 处理证书错误 edge_options.add_argument("--ignore-certificate-errors")4.2 性能监控集成
通过Edge DevTools Protocol获取性能数据:
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities caps = DesiredCapabilities.EDGE caps['goog:loggingPrefs'] = {'performance': 'ALL'} driver = webdriver.Edge(desired_capabilities=caps) # 获取网络请求日志 logs = driver.get_log('performance')5. 常见问题解决方案
5.1 浏览器自动更新导致失效
解决方案组合:
- 使用webdriver-manager自动匹配驱动
- 在测试代码中加入版本校验
def check_browser_version(): browser_version = driver.capabilities['browserVersion'] driver_version = driver.capabilities['chrome']['chromedriverVersion'].split(' ')[0] assert browser_version.split('.')[0] == driver_version.split('.')[0]5.2 元素定位失效处理
建议采用三级容错机制:
from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def safe_find_element(locator, timeout=30): try: return WebDriverWait(driver, timeout).until( EC.presence_of_element_located(locator) ) except TimeoutException: # 尝试备用定位方案 alternate_locator = get_alternate_locator(locator) return driver.find_element(*alternate_locator) except NoSuchElementException: # 最终兜底方案 raise ElementNotFoundError(f"元素定位失败: {locator}")6. 企业级测试框架优化
6.1 并行测试配置
使用pytest-xdist实现多进程运行:
# pytest.ini配置 [pytest] addopts = -n auto6.2 自动化报告生成
集成Allure生成可视化报告:
pip install allure-pytest测试代码添加装饰器:
import allure @allure.title("用户登录测试") def test_login(): with allure.step("输入凭证"): input_credentials("test", "123456") with allure.step("提交表单"): submit_form()7. 实战案例演示
以某电商网站为例的完整测试流程:
class TestEdgeShopping: @classmethod def setup_class(cls): cls.setup_driver() cls.homepage = HomePage(cls.driver) cls.login_page = LoginPage(cls.driver) def test_checkout_flow(self): self.homepage.search("iPhone 14") product_page = self.homepage.select_first_result() product_page.add_to_cart() cart_page = product_page.go_to_cart() checkout_page = cart_page.proceed_to_checkout() assert checkout_page.get_total() == "$999.00"踩坑经验:
- Edge在iframe切换时需要额外等待
- 购物车动画结束后才能点击结算按钮
- 支付页面需要禁用Edge的密码自动填充功能
8. 持续集成方案
8.1 GitHub Actions配置示例
name: Edge Test on: [push] jobs: test: runs-on: windows-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Run tests run: | python -m pytest tests/ --alluredir=./allure-results - name: Upload report uses: actions/upload-artifact@v3 with: name: allure-report path: ./allure-results8.2 Docker化方案
FROM mcr.microsoft.com/playwright/python:v1.22.0-focal RUN apt-get update && apt-get install -y \ python3-pip \ && rm -rf /var/lib/apt/lists/* COPY . /app WORKDIR /app RUN pip install -r requirements.txt CMD ["pytest", "tests/"]构建命令:
docker build -t edge-autotest . docker run -v $(pwd)/allure-results:/app/allure-results edge-autotest