根据 Nightwatch 中的参数生成动态测试
Generate dynamic tests based on a parameter in Nightwatch
我正在使用 NightwatchJS 在我们的报告网站上自动执行测试。
这是我的实际代码:
module.exports = {
'@tags': ['Report 1','base','full'],
'Report 1' : function (browser) {
checkAnalisi(browser, 'report1', 1, 2015, '767.507')
}
};
function checkAnalisi(browser, nomeAnalisi, scheda, year, risultatoAtteso){
return browser
.url('https://example.com/Wizard?analisi=' + nomeAnalisi)
.waitForElementVisible('body', 5000)
.selectScheda(scheda-1) //Seleziona la scheda (0-based)
.selectPromptValue('Year', year)
.selectRappresentazione('Table')
.waitForElementVisible('table', 5000, true)
.assert.containsText('table tr:last-child td:last-child', risultatoAtteso)
.end();
}
我对页面中的 select 不同内容做了一些帮助命令:
.selectScheda(scheda-1)
.selectPromptValue('Year', year)
.selectRappresentazione('Table')
selectPromptValue
想要一个提示名称和在页面中设置它的值。
目前该函数仅设置年份参数,但在我的报告中我也有不同的参数。
我想做的是传递一个对象给checkAnalisi
函数动态生成测试。例如,如果我想设置不同的提示值,我想传递类似 [['Year', 2015],['Another prompt','another value']]
的内容,而 checkAnalisi
函数应该添加 2 .selectPromptValue
个步骤以及相应的值。
是否可以在我的函数中循环输入数组以添加更多步骤?
实际上,我可以直接在我的 selectPromptValue
自定义命令中轻松解决这个问题。
我只是像这样将新参数添加到 checkAnalisi 函数中(promptValues 是新参数):
function checkAnalisi(browser, nomeAnalisi, scheda, promptValues, risultatoAtteso){
return browser
.url('https://example.com/Wizard?analisi=' + nomeAnalisi)
.waitForElementVisible('body', 5000)
.selectScheda(scheda-1) //Seleziona la scheda (0-based)
.selectPromptValue(promptValues)
.selectRappresentazione('Table')
.waitForElementVisible('table', 5000, true)
.assert.containsText('table tr:last-child td:last-child', risultatoAtteso)
.end();
}
然后我修改了 selectPromptValue.js 自定义命令,如下所示:
exports.command = function(v) {
for(var i=0; i<v.length; i++){
this.execute('$("#"+$("label:visible:contains(\'' + v[i][0] + '\')").attr("for")).val("' + v[i][1] + '")');
}
return this;
};
我正在使用 NightwatchJS 在我们的报告网站上自动执行测试。
这是我的实际代码:
module.exports = {
'@tags': ['Report 1','base','full'],
'Report 1' : function (browser) {
checkAnalisi(browser, 'report1', 1, 2015, '767.507')
}
};
function checkAnalisi(browser, nomeAnalisi, scheda, year, risultatoAtteso){
return browser
.url('https://example.com/Wizard?analisi=' + nomeAnalisi)
.waitForElementVisible('body', 5000)
.selectScheda(scheda-1) //Seleziona la scheda (0-based)
.selectPromptValue('Year', year)
.selectRappresentazione('Table')
.waitForElementVisible('table', 5000, true)
.assert.containsText('table tr:last-child td:last-child', risultatoAtteso)
.end();
}
我对页面中的 select 不同内容做了一些帮助命令:
.selectScheda(scheda-1)
.selectPromptValue('Year', year)
.selectRappresentazione('Table')
selectPromptValue
想要一个提示名称和在页面中设置它的值。
目前该函数仅设置年份参数,但在我的报告中我也有不同的参数。
我想做的是传递一个对象给checkAnalisi
函数动态生成测试。例如,如果我想设置不同的提示值,我想传递类似 [['Year', 2015],['Another prompt','another value']]
的内容,而 checkAnalisi
函数应该添加 2 .selectPromptValue
个步骤以及相应的值。
是否可以在我的函数中循环输入数组以添加更多步骤?
实际上,我可以直接在我的 selectPromptValue
自定义命令中轻松解决这个问题。
我只是像这样将新参数添加到 checkAnalisi 函数中(promptValues 是新参数):
function checkAnalisi(browser, nomeAnalisi, scheda, promptValues, risultatoAtteso){
return browser
.url('https://example.com/Wizard?analisi=' + nomeAnalisi)
.waitForElementVisible('body', 5000)
.selectScheda(scheda-1) //Seleziona la scheda (0-based)
.selectPromptValue(promptValues)
.selectRappresentazione('Table')
.waitForElementVisible('table', 5000, true)
.assert.containsText('table tr:last-child td:last-child', risultatoAtteso)
.end();
}
然后我修改了 selectPromptValue.js 自定义命令,如下所示:
exports.command = function(v) {
for(var i=0; i<v.length; i++){
this.execute('$("#"+$("label:visible:contains(\'' + v[i][0] + '\')").attr("for")).val("' + v[i][1] + '")');
}
return this;
};