You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Selenium+C#中为单个登录页编写多函数测试用例

如何用函数编写登录页面的测试脚本

核心思路很简单:把通用的登录逻辑封装成可复用函数,然后针对每条测试用例,传入不同的参数调用这个函数,再验证结果即可。这样既能减少重复代码,也能让测试用例的逻辑更清晰。

我以 Python + Selenium 为例(换成 Cypress、Playwright 等框架思路完全一致),给你拆解具体步骤:

第一步:封装通用登录函数

先写一个只负责完成登录操作的函数,它接受用户名、密码作为输入,执行输入、提交动作后,返回登录的结果(比如是否成功、错误提示内容)。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def login(driver, username, password):
    # 等待并定位用户名输入框,清空后输入内容
    username_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "username"))
    )
    username_input.clear()
    username_input.send_keys(username)
    
    # 同理处理密码输入框
    password_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "password"))
    )
    password_input.clear()
    password_input.send_keys(password)
    
    # 点击登录按钮
    login_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "login-btn"))
    )
    login_btn.click()
    
    # 判断登录结果(这里假设成功跳转到dashboard,失败显示错误提示)
    try:
        # 等待仪表盘元素出现,说明登录成功
        WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.ID, "dashboard"))
        )
        return {"success": True, "message": "登录成功"}
    except:
        # 获取错误提示文本
        error_msg = driver.find_element(By.ID, "error-message").text
        return {"success": False, "message": error_msg}

第二步:编写测试用例

根据你的10条测试用例,有两种写法可选:

方式1:独立测试函数(直观易懂,适合新手)

每条测试用例对应一个函数,逻辑清晰,方便单独调试:

def test_valid_login():
    driver = webdriver.Chrome()
    driver.get("https://your-login-page-url.com")
    result = login(driver, "valid_user", "valid_pass123")
    assert result["success"] == True, f"预期登录成功,实际结果:{result['message']}"
    driver.quit()

def test_empty_username():
    driver = webdriver.Chrome()
    driver.get("https://your-login-page-url.com")
    result = login(driver, "", "valid_pass123")
    assert result["success"] == False, "预期登录失败,实际成功了"
    assert "用户名不能为空" in result["message"], f"错误提示不符合预期:{result['message']}"
    driver.quit()

def test_wrong_password():
    driver = webdriver.Chrome()
    driver.get("https://your-login-page-url.com")
    result = login(driver, "valid_user", "wrong_pass")
    assert result["success"] == False, "预期登录失败,实际成功了"
    assert "密码错误" in result["message"], f"错误提示不符合预期:{result['message']}"
    driver.quit()

# 剩下的7条测试用例可以照这个模式扩展,比如:
# - 空密码测试
# - 不存在的用户名测试
# - 密码长度不足测试
# - 含特殊字符的用户名/密码测试
# - 大小写敏感的用户名测试
# - 登录后退出再登录测试
# - 记住密码功能测试

方式2:参数化测试(简洁高效,减少重复代码)

用 pytest 的参数化装饰器,把所有测试用例的参数和预期结果整理成列表,一次性执行所有测试:

import pytest

@pytest.mark.parametrize("username, password, expected_success, expected_msg", [
    ("valid_user", "valid_pass123", True, "登录成功"),
    ("", "valid_pass123", False, "用户名不能为空"),
    ("valid_user", "", False, "密码不能为空"),
    ("valid_user", "wrong_pass", False, "密码错误"),
    ("non_exist_user", "any_pass", False, "用户名不存在"),
    ("short", "valid_pass123", False, "用户名长度不能少于6位"),
    # 继续添加剩下的4条测试用例...
])
def test_login_cases(username, password, expected_success, expected_msg):
    driver = webdriver.Chrome()
    driver.get("https://your-login-page-url.com")
    result = login(driver, username, password)
    assert result["success"] == expected_success, f"测试用例失败:{username}/{password}"
    assert expected_msg in result["message"], f"错误提示不符:{result['message']}"
    driver.quit()

几个关键注意点

  • 单一职责:登录函数只做登录操作,测试函数只负责验证结果,不要把逻辑混在一起。
  • 可复用性:这个登录函数后续可以在所有需要登录的测试场景中调用(比如测试个人中心、订单页面),不用重复写登录代码。
  • 断言明确:每个测试用例都要有清晰的断言,确保预期结果和实际结果一致。
  • 资源清理:每次测试后记得关闭浏览器(或者用 fixture 自动管理),避免资源浪费。

如果你的测试用例涉及验证码、多因素认证等复杂场景,只需要在登录函数里添加对应的逻辑即可,测试用例还是一样调用这个函数传参。

内容的提问来源于stack exchange,提问作者Sumit Garg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:50:55