【问题标题】:How to pass parameters from the Gruntfile.js to the webdriverio spec?如何将 Gruntfile.js 中的参数传递给 webdriverio 规范?
【发布时间】:2015-03-31 13:39:17
【问题描述】:

我想从 Gruntfile.js 参数化我的 webdriverio 规范。 目标是在 Grunt 中指定主机、端口、用户名、密码以及可能的其他参数,然后从规范文件中读取它们。

https://www.npmjs.com/package/grunt-webdriver#overview 阅读 Source Labs 示例我在选项中设置了主机和端口。但是在配置端口时出现以下错误:

/Users/sandro/Developing/Projekte/sling/svn/contrib/explorers/resourceeditor/frontend/node_modules/grunt-webdriver/node_modules/webdriverio/lib/utils/PromiseHandler.js:154
             throw error;
                   RuntimeError: RuntimeError

这就是为什么我认为必须有其他方法来做到这一点。 我的 Gruntfile.js 看起来像这样:

module.exports = function(grunt) {

var e2eTestSpecFolder = '../src/test/javascript/e2e/spec/**/*spec.js';

grunt.initConfig({
...
    webdriver: {
        options: {
            host: 'localhost',
            port: 8080
        },
        chrome: {
            tests: [e2eTestSpecFolder],
            options: {
                // overwrite default settings 
                desiredCapabilities: {
                    browserName: 'chrome'
                }
            }
        },
        firefox: {
            tests: [e2eTestSpecFolder],
            options: {
                // overwrite default settings 
                desiredCapabilities: {
                    browserName: 'firefox'
                }
            }
        }
    }
})

...
grunt.registerTask('desktop_build', ['webdriver:chrome', 'webdriver:firefox']);
};

提前感谢您的任何提示!

更新: 我使用以下版本:

  • grunt-cli: v0.1.13

  • 咕噜声:v0.4.5

  • webdriver-manager: 3.0.0

  • grunt-webdriver: 0.4.8

【问题讨论】:

  • 嗨。你的 grunt 和 w.io 版本是什么?你想达到什么目的?将 webdriver.io 连接到外部集线器/通过代理?
  • 测试应该使用主机和端口打开一个网站,并使用用户名和密码登录该网站。测试在那里创建数据,删除数据等等。但是主机、端口、用户名和密码应该是可配置的。我想在 grunt.js 文件中为这些值提供初始配置,并且我想让它们可以从命令行覆盖。但问题是,如何将这些变量从 grunt 文件传递​​给 webdriver.io 规范。版本: grunt-cli:v0.1.13 grunt:v0.4.5 webdriver-manager:3.0.0 grunt-webdriver:0.4.8

标签: javascript gruntjs webdriver-io


【解决方案1】:

好的,我有你的问题:)

这些“主机”和“端口”参数是预定义的参数,并用于其他目的(它将执行测试的主机和端口,而您正在重新定义端口 - 这就是它们失败的原因,因为此处的示例 - https://github.com/webdriverio/webdriverio/blob/master/examples/webdriverio.saucelabs.js 您可以看到它们用于连接到 saucelabs)。为此目的,最简单的解决方案是定义 ENV 变量并为它们设置一些默认值(但实际上你不应该在 gruntfile 中这样做,这不是必需的) 您可以在第一次放置这些变量的文件中定义它,例如:

testHost: (typeof(process.env.TEST_HOST) === 'undefined') ? 'http://localhost' : process.env.TEST_HOST;

然后,如果需要将 TEST_HOST 作为环境变量,您只需提供它:

    Linux: sh~ TEST_HOST=http://google.com
grunt task
    Win: export TEST_HOST=http://google.com
grunt task

如果您不设置变量,则“http://localhost”将是默认变量。

【讨论】:

  • 好的,然后我将“testHost”提供给 Gruntfile.js。问题是,如何在 webdriverio 规范中访问它?
  • @Sandro 使用 process.env.TEST_HOST,或者使用 grunt.config.get()
  • 如果可能的话,我更愿意使用 gruntjs.com/api/grunt.option 作为 testHost 而不是 ENV 变量。因为这似乎是在 Grunt 中定义参数的方式。但当然,如果这不可能,那么我必须使用 ENV 变量。
  • 我尝试使用 console.log("process.env.testHost: "+process.env.testHost); 在规范文件中记录 testHost 变量,但这似乎没有记录调用 grunt 配置的变量。
  • 你是如何运行它的? env | grep testHost 的输出是什么?
猜你喜欢
  • 2019-07-12
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多