将测试数据提供给Nightwatch

时间:2018-01-03 09:55:24

标签: automation nightwatch.js

我试图向测试数据提供测试数据,但我不知道如何。如何向Nightwatch测试提供任何动态测试数据?

我不想将值硬编码到代码中。我想从文件中提供它。

编辑:

.setValue('selector', 'DEBBIE A/P EKU')

4 个答案:

答案 0 :(得分:3)

由于您在其中一条评论中提到了它想要从文件中读取值,我建议您通过伪JSON(实际上是.js)来实现。也是我在公司应用的解决方案。

我有多个json文件,其中包含我不想在代码中拥有的某些测试数据。这些基本结构如下:

module.exports = {
  WHATEVER_IDENTIFIER_I_WANT: 'Some shiny value'
}

我的页面对象包含如下所示的行:

const STATIC = require('path/to/static/file')
…
.setValue('selector', STATIC.WHATEVER_IDENTIFIER_I_WANT)

而且,它并不是非常复杂,但它符合目的。

如果您不想使用module.exports.js,您仍然可以使用某些节点方法来加载和解析JSON。 E.g。

  • fs.readFileSync / fs.readFile(加载JSON文件)
    const file = fs.readFileSync('path/to/file')
  • JSON.parse()(检索JavaScript对象)
    const STATIC = JSON.parse(file)

希望这对你有用:)

答案 1 :(得分:1)

我经历过同样的问题。目前我的设置是这样的: 原始数据位于Excel工作表中。我使用node.js将excel表转换为json文件。然后在夜视仪中使用json数据。

以下是在nightwatch中读取json文件的代码:

module.exports = {
    tags: ['loginpage'],
    // if not regular size logout button is not visible

    'Login' : function (client) {
        var credentials;
        try{
            credentials = require('./path/to/inputJsonData.json');
        } catch(err) {
            console.log(err);
            console.log ('Couldn\'t load the inputJsonData file. Please ensure that ' +
                'you have the inputJsonData.json in subfolder ./path/to ' +
                'in the same folder as the tests');
            process.exit();
        }

以下是使用其中数据的代码:

    client
        .url(credentials.url)
        .waitForElementVisible('body', 1000)
        .assert.title('Sign In Home Page')
        .login(credentials.username,credentials.password)
        // some more steps here 
        .logout()
        .end();
    }
};

inputJsonData.json data

{
    "url": "http://path/to/my/input/credentials/file",
    "username": "yourUserName",
    "password": "yourPassword"
}

我的问题/疑问: 当文件具有以下格式时,如何查找从文件读入json对象的元素数?:

[
 {
  ....
 },
 {
  ....
 },
 .....
 {
  ....
 }
]

我尝试获取元素数量的失败:JSON.parse(company).count其中company是另一个json读取文件,如上面代码中的凭据。

回答:使用标准的javascript数组属性长度 company.length

答案 2 :(得分:0)

TheBayOr简要回答了有关文件使用的问题。只是要补充一点,如果您不是字面意思是非“代码”文件,而是仅使用其他位置存储值,那么最常见的方法是使用globals

您可以将值数组放置在nightwatch.json中...

"test_settings" : {
    "default" : {
        "selenium_port"  : 4444,
        "selenium_host"  : "localhost",
        "silent": true,
        "globals" : {
            "VARIABLE_1" : "i'm a variable",
            "VARIABLE_2" : "i'm a variable too"
        },      
        "desiredCapabilities": {
           "browserName": "chrome",
           "javascriptEnabled": true,
           "acceptSslCerts": true
       }
    },
    "other_environment" : {
        "globals" : {
            "VARIABLE_1" : "i'm a different variable",
            "VARIABLE_2" : "i'm a different variable too"

您可以在测试中使用它们,例如....

.url(browser.globals.VARIABLE_1)

在上面的通知中,您可以在不同的环境下设置全局变量集。这样做的好处是,您可以有多个集合,并通过运行nightwatch -e 'my desired environment'使用想要的集合。

类似地,这可以通过将数据数组放入全局文件中来实现,例如globals.js并在“ globals.path”中引用它。

如果您想真正使用它,甚至可以将变量存储在global.js中,然后使用“ fs”库将值写入文件,然后从那里读取测试。我会建议一个新的问题,如果那是您想要的。

希望能添加一些东西:)

答案 3 :(得分:0)

就我而言,我刚刚创建了一个读取变量,数据等的函数

此处有更多详细信息:https://stackoverflow.com/a/64616920/3957754