news 2026/11/4 5:02:59

Python+Selenium+Edge自动化测试框架搭建指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python+Selenium+Edge自动化测试框架搭建指南

1. 项目概述

最近在帮团队搭建自动化测试框架时,发现很多同事对基于Python+Selenium+Edge的测试方案存在不少疑问。作为从2016年就开始使用Selenium的老鸟,今天就把这套组合拳的完整操作流程梳理出来,特别针对Edge浏览器的特性做了优化适配。不同于网上那些零散的教程,我会把环境配置、元素定位、异常处理等核心环节的坑都填平,让你用最新稳定版本来实现企业级测试自动化。

2. 环境准备

2.1 基础软件安装

首先需要确保以下组件就位:

  • Python 3.8+(推荐3.10稳定版)
  • Microsoft Edge浏览器(版本115+)
  • Edge对应的WebDriver

具体安装步骤:

  1. 从Python官网下载安装包时,务必勾选"Add Python to PATH"
  2. Edge浏览器版本号查看:在地址栏输入edge://settings/help
  3. 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内核浏览器,推荐使用这些定位策略:

  1. 优先使用CSS Selector(性能最优)
  2. 复杂结构用XPath轴定位
  3. 动态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 浏览器自动更新导致失效

解决方案组合:

  1. 使用webdriver-manager自动匹配驱动
  2. 在测试代码中加入版本校验
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 auto

6.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-results

8.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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 5:02:29

智能制造中焊接工艺优化的机器学习应用

1. 项目背景与行业痛点焊接材料成型稳定性一直是制造业中的关键挑战。在传统焊接工艺中,焊材的熔化、流动和凝固过程受多种因素影响,包括环境温湿度、基材表面状态、焊接参数设置等。这些变量导致焊缝质量波动大,废品率高,后期检测…

作者头像 李华
网站建设 2026/11/4 5:01:02

Windows下Mamba-ssm安装避坑指南:编译链路全解析

1. 为什么Mamba-ssm在Windows上安装总像在解一道加密题? “最新保姆级Mamba-ssm安装,Windows下mamba环境搭建(零基础)”——这个标题背后藏着的不是技术红利,而是一连串被默认忽略的系统性断层。我见过太多人卡在第一…

作者头像 李华
网站建设 2026/11/4 5:01:02

《算法导论》复习地图:核心考点、易错点与三轮过书清单

简介:《算法导论》第三版英文原版以PDF电子书形式呈现,面向计算机专业本科生、研究生及准备算法岗面试与技术深造的读者,用于系统搭建算法设计与分析的知识框架。压缩包内仅含1个PDF文件,体积约5.12MB,采用MIT Press原…

作者头像 李华
网站建设 2026/11/4 5:00:46

统一数据底座实战:Lance+Spark+Ray构建多模态数据湖

1. 项目概述:为什么“三套系统”必须走向“统一数据底座”我干数据平台架构这行快十二年了,从最早用Hadoop MapReduce写Java Job跑报表,到后来搭Spark集群做实时推荐,再到最近三年深度参与企业级多模态数据湖建设——见过太多团队…

作者头像 李华
网站建设 2026/11/4 5:00:16

VCF数据LD分析实战:从预处理到热图解读

1. 这不是统计学考试题,而是你手头那批SNP数据的“关系图谱”我第一次看到“连锁不平衡”这个词,是在某高校生物信息实验室的项目交接文档里。当时刚接手一个群体遗传学模拟项目X,对方只甩来一句:“把VCF里的SNP做下LD分析&#x…

作者头像 李华
网站建设 2026/11/4 5:00:05

Jev不是梗,是数字时代零延迟体验的技术认证

1. “Jev”不是新词,而是被误传的“Jet”发音变形最近刷短视频或看弹幕时,你大概率见过这个词:“Jev”。有人发评论说“这波Jev了”,有人截图配文“Jev到头皮发麻”,还有人直接把“Jev”当动词用——“别Jev我”“他Je…

作者头像 李华