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

Python Selenium-Pytest自动化测试在BrowserStack运行失败求助

解决你的BrowserStack + Pytest自动化测试问题

我来帮你逐个拆解并解决这两个报错:

一、先搞定「NameError: name 'driver' is not defined」

这个错误本质是两个问题叠加导致的:

  1. 你的test_setup因为BrowserStack连接失败,根本没完成driver的初始化,后续测试自然找不到这个变量
  2. 在pytest里用global driver的方式非常不可靠——pytest的测试函数是独立执行的,推荐用pytest fixture来管理driver,这是业界规范的做法

修复方案:改用pytest fixture管理driver

把原来的test_setup换成fixture,pytest会自动在测试前初始化driver,就算初始化失败也会直接标记测试为失败,不会出现未定义的尴尬:

import pytest
from selenium import webdriver
from ZProjects.AutomationS.Pages.utils import Utils

@pytest.fixture(scope="function")
def driver():
    desired_cap = {
        'browser': 'Chrome',
        'browser_version': '79.0',
        'os': 'Windows',
        'os_version': '10',
        'resolution': '1024x768',
        'name': 'Bstack-[Python] Sample Tests',
        # 必须加上你的BrowserStack账号信息
        'browserstack.user': '你的BrowserStack用户名',
        'browserstack.key': '你的BrowserStack access key'
    }
    # 修正BrowserStack的hub地址,路径是/wd/hub,不是你之前写的/fg/hub
    driver = webdriver.Remote(
        command_executor='https://hub-cloud.browserstack.com/wd/hub',
        desired_capabilities=desired_cap
    )
    driver.implicitly_wait(10)
    driver.maximize_window()
    print("Chrome Browser Launched successfully - Setup - Passed")
    yield driver  # 将driver传递给测试函数使用
    # 测试结束后自动关闭浏览器
    driver.quit()
    print("Browser closed")

# 测试函数直接接收driver参数即可
@allure.severity(allure.severity_level.BLOCKER)
def test_login_1(driver):
    driver.get(Utils.url)
    login = loginpageMethods(driver)
    login.enter_username(Utils.username)
    login.enter_password(Utils.password)
    login.click_login()
    # 建议把time.sleep换成WebDriverWait显式等待,测试更稳定
    # time.sleep(50)
    print("User logged in Successfully - Passed")

二、解决BrowserStack连接失败的URLLib3错误

看你代码里的连接配置至少有两个明显问题:

  1. Hub地址错误:正确的BrowserStack Remote hub地址是https://hub-cloud.browserstack.com/wd/hub,你之前写的/fg/hub是无效路径
  2. 缺少认证信息:你只在URL里写了用户名jpopiiiiii,但没加access key——BrowserStack需要用户名+access key才能完成认证,要么把两者拼在URL里(https://<用户名>:<access key>@hub-cloud.browserstack.com/wd/hub),要么像上面的代码一样放在desired_cap里

额外优化建议

  • 尽量少用time.sleep(),改用WebDriverWait等待元素加载,测试稳定性会大幅提升
  • 确认你的BrowserStack账号状态正常(没有欠费、并行测试额度足够)
  • 如果用的是Selenium 4+版本,建议改用W3C格式的capabilities写法(不过你当前用的Selenium 3.x,现有写法没问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:47:50