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

Python Selenium:跨文件复用登录类实现同浏览器测试求助

嘿,作为刚接触Python和Selenium的新手,你想实现登录模块复用、同一浏览器跑测试的需求其实很常见,我给你两种实用的实现方式,从基础到进阶都有,你可以根据自己的场景选:


方法1:手动传递浏览器实例(适合简单脚本)

核心思路是让登录模块创建的浏览器实例,通过方法暴露给测试用例模块,避免重复启动浏览器。

1. 重构你的登录模块(mylogin.py)

让Login类初始化时创建浏览器实例,同时提供方法返回这个实例,方便其他模块调用:

# mylogin.py
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

class Login:
    def __init__(self):
        # 初始化浏览器实例(这里用Chrome,可替换为Firefox等)
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.login_url = "https://your-actual-login-url.com"  # 替换成你的登录地址

    def perform_login(self, username, password):
        self.driver.get(self.login_url)
        # 定位用户名/密码输入框(替换成你网站实际的元素定位器)
        WebDriverWait(self.driver, 10).until(
            EC.presence_of_element_located((By.ID, "username"))
        ).send_keys(username)
        self.driver.find_element(By.ID, "password").send_keys(password)
        self.driver.find_element(By.ID, "login-submit-btn").click()
        # 等待登录完成(比如等待首页元素出现)
        WebDriverWait(self.driver, 10).until(
            EC.title_contains("首页")
        )

    def get_driver(self):
        # 返回已登录的浏览器实例
        return self.driver

    def close_browser(self):
        # 测试结束后关闭浏览器
        self.driver.quit()

2. 在测试用例模块(myorder.py)中复用浏览器

创建Login实例完成登录后,获取它的浏览器实例,传入测试类执行后续操作:

# myorder.py
from mylogin import Login
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class OrderOperations:
    def __init__(self, driver):
        self.driver = driver
        self.order_page_url = "https://your-actual-order-page.com"  # 替换成订单页面地址

    def create_new_order(self):
        self.driver.get(self.order_page_url)
        # 执行创建订单的操作(替换成实际元素定位)
        WebDriverWait(self.driver, 10).until(
            EC.presence_of_element_located((By.ID, "select-product"))
        ).click()
        self.driver.find_element(By.ID, "confirm-order-btn").click()
        # 验证订单创建成功
        assert "订单创建成功" in self.driver.page_source

# 执行完整测试流程
if __name__ == "__main__":
    # 初始化登录模块并完成登录
    login_module = Login()
    login_module.perform_login("your-test-username", "your-test-password")
    # 获取已登录的浏览器实例
    logged_in_driver = login_module.get_driver()
    # 初始化订单测试类,传入同一个浏览器实例
    order_test = OrderOperations(logged_in_driver)
    order_test.create_new_order()
    # 测试完成后关闭浏览器
    login_module.close_browser()

方法2:用pytest Fixture复用(推荐用于自动化测试)

如果你的测试用例较多,用pytest的fixture可以更优雅地管理前置/后置操作,实现一次登录、多个测试用例复用同一浏览器。

1. 新建conftest.py(pytest的配置文件)

这里定义一个模块级别的fixture,负责创建登录后的浏览器实例:

# conftest.py
import pytest
from mylogin import Login

@pytest.fixture(scope="module")
def logged_in_driver():
    # 前置操作:初始化登录并完成登录
    login_module = Login()
    login_module.perform_login("your-test-username", "your-test-password")
    driver = login_module.get_driver()
    yield driver  # 将浏览器实例传递给测试用例
    # 后置操作:测试完成后关闭浏览器
    login_module.close_browser()

2. 编写测试用例(myorder.py)

直接在测试函数中接收logged_in_driver参数,复用已登录的浏览器:

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

def test_create_order(logged_in_driver):
    driver = logged_in_driver
    driver.get("https://your-actual-order-page.com")
    # 执行创建订单操作
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "select-product"))
    ).click()
    driver.find_element(By.ID, "confirm-order-btn").click()
    assert "订单创建成功" in driver.page_source

def test_view_order_list(logged_in_driver):
    driver = logged_in_driver
    driver.get("https://your-actual-order-list-page.com")
    # 验证订单列表是否加载成功
    assert WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "order-list"))
    ).is_displayed()

新手小贴士

  • 记得替换代码中的元素定位器(ID、XPath等)为你测试网站的实际元素
  • 确保安装了对应版本的浏览器驱动(比如ChromeDriver要和Chrome版本匹配)
  • 如果用pytest,先通过pip install pytest安装

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:05:51