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

Node项目中YAML读取dotenv环境变量失败问题求助

问题描述

我使用Cucumber-js在BrowserStack上运行测试,尝试通过dotenv存储凭证并让browserstack.yml读取环境变量。硬编码凭证时项目运行正常,但使用环境变量则抛出「WebDriverError: Invalid username or password」错误。项目仅包含单个feature文件、步骤文件和钩子文件,已在钩子中提前执行dotenv初始化代码,但问题仍未解决。

相关配置如下:

browserstack.yml

userName: ${BROWSERSTACK_USERNAME}
accessKey: ${BROWSERSTACK_ACCESS_KEY}
platforms:
  - os: Windows
    osVersion: 11
    browserName: Chrome
    browserVersion: 115.0
parallelsPerPlatform: 1
browserstackLocal: false
buildName: bstack-demo
buildIdentifier: ${BUILD_NUMBER}
projectName: BrowserStack Sample
testObservability: false
networkLogs: false
consoleLogs: info

.env文件

BROWSERSTACK_USERNAME=thing1
BROWSERSTACK_ACCESS_KEY=thing2

依赖配置(package.json)

{
  "devDependencies": {
    "@cucumber/cucumber": "^9.3.0",
    "assert": "^2.0.0",
    "browserstack-node-sdk": "^1.24.2",
    "dotenv": "^16.3.1",
    "geckodriver": "^4.1.3"
  },
  "dependencies": {
    "selenium-webdriver": "^4.10.0"
  }
}

钩子中的dotenv初始化代码

const dotenv = require('dotenv');
dotenv.config();

报错信息

WebDriverError: Invalid username or password
    at Object.checkLegacyResponse (/Users/user/project/node_modules/selenium-webdriver/lib/error.js:558:15)
    at parseHttpResponse (/Users/user/project/node_modules/selenium-webdriver/lib/http.js:593:13)
    at Executor.execute (/Users/user/project/node_modules/selenium-webdriver/lib/http.js:529:28)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    Then a thing - SKIPPED
    After - PASSED
解决方法
  • 调整dotenv加载时机:BrowserStack Node SDK在启动时就会读取browserstack.yml,而Cucumber钩子是测试运行阶段才执行的,这时候环境变量还没注入到SDK的上下文里。需要在SDK启动前加载dotenv:
    修改package.json中的测试脚本,用node -r dotenv/config预加载dotenv:

    "scripts": {
      "test": "node -r dotenv/config node_modules/@cucumber/cucumber/bin/cucumber-js"
    }
    

    或者创建单独的启动脚本(比如start-test.js):

    require('dotenv').config();
    const { spawn } = require('child_process');
    spawn('npx', ['cucumber-js'], { stdio: 'inherit' });
    

    然后在package.json中设置"test": "node start-test.js"。

  • 确认.env文件路径:如果你的.env文件不在项目根目录,需要在dotenv初始化时指定路径:

    dotenv.config({ path: './your/path/to/.env' });
    
  • 验证环境变量加载情况:在钩子代码中添加日志,确认变量是否被正确读取:

    console.log('Username:', process.env.BROWSERSTACK_USERNAME);
    console.log('Access Key:', process.env.BROWSERSTACK_ACCESS_KEY);
    

    如果没有输出正确值,说明dotenv未成功加载。

  • 检查变量名拼写:确保.env中的变量名和browserstack.yml里的完全一致,注意大小写(比如BROWSERSTACK_USERNAME不能写成小写)。

内容的提问来源于stack exchange,提问作者lacking-cypher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:13:10