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

如何在Python Selenium中调用类函数后复用同一浏览器实例继续测试

解决Python Selenium共享浏览器实例的问题

核心问题分析

你当前的代码存在几个关键问题导致无法复用浏览器实例:

  • 主测试脚本没有接收LoginTestProject函数返回的浏览器实例,反而试图依赖全局变量driver跨模块访问,这很容易导致变量未定义或作用域混乱。
  • 函数内return语句后的代码永远不会执行,属于无效代码。
  • 测试脚本中的XPATH多了一个多余的斜杠,导致元素定位失败。
  • 大量使用time.sleep硬等待,容易因页面加载速度差异导致元素找不到。

修复方案(规范写法)

1. 修正函数文件(Login2.py)

去掉全局变量,直接创建并返回浏览器实例,同时用显式等待替代硬等待:

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

def LoginTestProject():
    # 初始化浏览器实例
    driver = webdriver.Chrome()
    driver.get('https://www.bbc.co.uk/news')
    driver.maximize_window()
    wait = WebDriverWait(driver, 20)

    # 显式等待世界板块按钮可点击后点击
    world_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="orb-modules"]/header/div[2]/div[1]/div[1]/nav/ul/li[6]/a')))
    world_button.click()

    # 显式等待非洲板块按钮可点击后点击
    africa_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="orb-modules"]/header/div[2]/div[2]/div[1]/nav/ul/li[1]/a')))
    africa_button.click()

    time.sleep(2)  # 可替换为等待页面加载完成的显式条件
    return driver  # 返回浏览器实例供主脚本复用

2. 修正测试文件

接收函数返回的浏览器实例,修复XPATH错误,并使用显式等待:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
# 导入正确的函数
from TestingProject.Pages.Login2 import LoginTestProject

# 接收函数返回的浏览器实例,实现复用
driver = LoginTestProject()

wait = WebDriverWait(driver, 20)
# 修复XPATH的多余斜杠,显式等待元素可点击后操作
target_element = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="topos-component"]/div/div[1]/div/div[3]/div/div[1]/div/div[2]/div[1]/a/h3')))
target_element.click()

time.sleep(2)
driver.quit()

关键说明

  • 用函数返回值传递浏览器实例是最规范的方式,避免全局变量带来的作用域问题。
  • 显式等待(WebDriverWait + 预期条件)比time.sleep更可靠,能根据页面实际加载状态等待,减少测试不稳定的情况。
  • 测试脚本中必须显式接收返回的driver对象,否则主脚本中的driver变量会因未定义报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:32:52