我试图向测试数据提供测试数据,但我不知道如何。如何向Nightwatch测试提供任何动态测试数据?
我不想将值硬编码到代码中。我想从文件中提供它。
编辑:
.setValue('selector', 'DEBBIE A/P EKU')
答案 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。
const file = fs.readFileSync('path/to/file')
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)
就我而言,我刚刚创建了一个读取变量,数据等的函数