前言

本文将带大家从零开始,在 Windows 环境 下搭建一个基于 Selenium + Python 的自动化测试框架,并采用 PO(Page Object)模式 来提升可维护性。


一、环境准备

1. 安装 Python

Python 官网 下载并安装 Python 3.x。
安装时记得勾选Add Python to PATH

验证是否安装成功:

python --version
pip --version

2. 安装浏览器 & 驱动

本项目使用 Google Chrome

  1. 下载并安装 Chrome 浏览器

  2. 下载对应版本的 ChromeDriver(需和 Chrome 版本一致):
    👉 ChromeDriver 下载地址

  3. 解压后,将 chromedriver.exe 放到 Python 安装目录的 Scripts 文件夹,或添加到系统环境变量 PATH 中。

验证:

chromedriver --version

3. 安装 Selenium

pip install selenium pytest

4. 编辑器(推荐 PyCharm)

下载 PyCharm Community,方便代码编写与调试。


二、PO 模式简介

PO(Page Object)模式的核心思想是:

  • 页面对象类(Page):封装页面元素和操作方法。

  • 测试用例类(Test):只调用 Page 提供的方法,不直接操作元素。

优势:
✅ 提高可维护性
✅ 降低重复代码
✅ 测试逻辑与页面操作解耦


三、项目结构设计

在项目根目录 crm_test/ 下建立目录结构:

crm_test/
├── pages/                  # 页面对象层
│   ├── base_page.py        # 页面基类,封装通用方法
│   ├── login_page.py       # 登录页面
│   └── home_page.py        # 首页
├── tests/                  # 测试用例层
│   └── test_login.py       # 登录测试用例
├── utils/                  # 工具类(配置、日志)
│   └── config.py
├── conftest.py             # pytest 配置(driver 启停)
├── requirements.txt        # 依赖文件

四、代码实现

1. pages/base_page.py

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class BasePage:
    def __init__(self, driver):
        self.driver = driver

    def open(self, url):
        self.driver.get(url)

    def find(self, locator, timeout=10):
        return WebDriverWait(self.driver, timeout).until(
            EC.presence_of_element_located(locator)
        )

    def click(self, locator):
        self.find(locator).click()

    def input(self, locator, text):
        el = self.find(locator)
        el.clear()
        el.send_keys(text)

2. pages/login_page.py

from selenium.webdriver.common.by import By
from pages.base_page import BasePage

class LoginPage(BasePage):
    # 定位符
    username_input = (By.NAME, "name")       # 用户名输入框
    password_input = (By.NAME, "password")   # 密码输入框
    login_button = (By.CLASS_NAME, "btn")    # 登录按钮

    def login(self, username, password):
        self.input(self.username_input, username)
        self.input(self.password_input, password)
        self.click(self.login_button)

3. pages/home_page.py

from selenium.webdriver.common.by import By
from pages.base_page import BasePage

class HomePage(BasePage):
    user_info = (By.CLASS_NAME, "user-name")

    def get_user_info(self):
        return self.find(self.user_info).text

4. utils/config.py

BASE_URL = "http://your-crm-wukong-url.com/"
USERNAME = "admin"
PASSWORD = "123456"

5. conftest.py

import pytest
from selenium import webdriver

@pytest.fixture(scope="session")
def driver():
    driver = webdriver.Chrome()
    driver.maximize_window()
    yield driver
    driver.quit()

6. tests/test_login.py

import pytest
from pages.login_page import LoginPage
from pages.home_page import HomePage
from utils import config

def test_login(driver):
    login_page = LoginPage(driver)
    login_page.open(config.BASE_URL)
    login_page.login(config.USERNAME, config.PASSWORD)

    home_page = HomePage(driver)
    assert config.USERNAME in home_page.get_user_info()

五、运行用例

在项目根目录执行:

pytest -s -v

效果:浏览器启动 → 输入账号密码 → 登录 → 断言登录成功。


六、总结

本文分享了如何在 Windows 环境 下,从零开始搭建一个基于 Selenium + Python 的自动化测试框架:

  • 配置 Python、Selenium、浏览器驱动

  • 使用 PO 模式 封装页面对象

  • 编写用例并用 pytest 执行

通过本项目,我们可以快速实现 CRM悟空 的自动化测试,并为后续扩展(如持续集成 CI、日志报告 Allure)打下基础。


👉 后续我会继续写一篇进阶文章,介绍如何将这个框架接入 Allure 报告 + Jenkins,实现自动化测试的持续集成。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐