TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

Python自动化测试实战:Selenium框架从入门到精通

2025-08-04
/
0 评论
/
2 阅读
/
正在检测是否收录...
08/04


一、为什么选择Selenium?

作为从业10年的测试工程师,我见证过太多团队从手工测试到自动化测试的转型。Selenium之所以能成为行业标准,核心在于它的跨平台、多语言支持和开源生态。最新统计显示,全球76%的Web自动化测试项目采用Selenium方案。

二、环境搭建(含避坑指南)

2.1 基础环境配置

python

推荐使用conda创建独立环境

conda create -n auto_test python=3.8
pip install selenium==4.1.0 webdriver-manager

2.2 浏览器驱动管理

传统方式需要手动下载驱动,现在推荐使用:python
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
常见报错解决:若出现ERR_SSL_PROTOCOL_ERROR,添加--ignore-certificate-errors参数即可。

三、八大元素定位实战

以百度搜索为例,演示不同定位策略:

python

CSS选择器(推荐)

searchbox = driver.findelement(By.CSS_SELECTOR, "#kw")

XPath高级用法

searchbutton = driver.findelement(
By.XPATH, "//input[@id='su' and contains(@class, 'btn')]"
)

相对定位(Selenium 4新增)

relativeloc = driver.findelement(
By.XPATH, "//form[@name='f']/following-sibling::script"
)

定位优先级建议
1. 首选CSS Selector(性能最优)
2. 复杂结构用XPath
3. 动态ID考虑部分匹配

四、等待机制深度优化

4.1 智能等待封装

python def wait_clickable(locator, timeout=10): return WebDriverWait(driver, timeout).until( EC.element_to_be_clickable(locator) )

4.2 自定义等待条件

python
class elementhascssclass(object): def init(self, locator, cssclass):
self.locator = locator
self.cssclass = cssclass

def __call__(self, driver):
    element = driver.find_element(*self.locator)
    if self.css_class in element.get_attribute("class"):
        return element
    return False

五、Pytest集成实战

5.1 基础测试架构

python

conftest.py

@pytest.fixture(scope="module")
def browser():
driver = init_driver()
yield driver
driver.quit()

test_search.py

def testbaidusearch(browser):
browser.get("https://www.baidu.com")
assert "百度" in browser.title

5.2 高级功能整合

python

失败自动截图

@pytest.hookimpl(hookwrapper=True)
def pytestruntestmakereport(item, call):
outcome = yield
report = outcome.getresult() if report.when == "call" and report.failed: browser = item.funcargs["browser"] browser.savescreenshot(f"error_{item.name}.png")

六、企业级框架设计

6.1 Page Object模式进阶

python
class LoginPage:
def init(self, driver):
self.driver = driver
self.url = config.BASE_URL + "/login"

@property
def username(self):
    return self.driver.find_element(By.ID, "username")

def login(self, user, pwd):
    self.username.send_keys(user)
    # 其他操作...
    return HomePage(self.driver)

6.2 自动化测试平台集成

python

对接Jenkins示例

import jenkins
server = jenkins.Jenkins(
'http://jenkins:8080',
username='admin',
password='******'
)
server.buildjob('autotest_suite')

七、性能优化技巧

  1. 并行执行:使用pytest-xdist插件
    bash pytest -n 4 tests/
  2. 无头模式加速
    python options = webdriver.ChromeOptions() options.add_argument("--headless")
  3. 网络请求Mock:配合requests_mock减少依赖

八、新时代挑战与对策

随着SPA应用的普及,传统定位方式面临挑战。建议:

  1. 使用driver.execute_script()处理Shadow DOM
  2. 对动态元素采用指纹定位(如文本+元素类型组合)
  3. 引入AI视觉定位(Applitools等工具)


结语:自动化测试不是目的而是手段,真正的价值在于建立快速反馈的质保体系。建议从关键路径开始,逐步扩大覆盖范围。记住,好的自动化case应该像钟表齿轮一样精准协作。

selenium教程XPath定位Python自动化测试Web自动化Pytest集成
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/34820/(转载时请注明本文出处及文章链接)

评论 (0)