Python Selenium-Pytest自动化测试在BrowserStack运行失败求助
解决你的BrowserStack + Pytest自动化测试问题
我来帮你逐个拆解并解决这两个报错:
一、先搞定「NameError: name 'driver' is not defined」
这个错误本质是两个问题叠加导致的:
- 你的
test_setup因为BrowserStack连接失败,根本没完成driver的初始化,后续测试自然找不到这个变量 - 在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错误
看你代码里的连接配置至少有两个明显问题:
- Hub地址错误:正确的BrowserStack Remote hub地址是
https://hub-cloud.browserstack.com/wd/hub,你之前写的/fg/hub是无效路径 - 缺少认证信息:你只在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
相关产品推荐
相关产品推荐

