【发布时间】:2017-05-17 12:41:44
【问题描述】:
问题的简要介绍。所以我的项目使用 BDD 框架(黄瓜)在 Protractor/Selenium 的帮助下使用 Typescript 作为脚本语言自动化。我将一个包含多行的表传递给步骤定义,并希望使用 typescript/javascript 在迭代模式下运行该函数。我传递了预期的下拉列表值并针对应用程序进行验证。在堆栈溢出的一个主题的帮助下,我提供了以下解决方案。 (Using protractor with loops)
但问题是它并不总是有效。很多时候我遇到函数超时错误。(错误:函数在 30000 毫秒后超时)
谁能告诉我我在这里缺少什么?任何帮助将不胜感激。
请在下面找到 Cucumber 和 Typescript 代码。
Cucumber Step Definition_Screenshot
@then(/^.*verify the country data in both the citizenship drop downs$/, 'extratime', 30000)
public VerifyCountryData(table, callback: CallbackStepDefinition): void {
let promises = []
let dropcheck
let dropcheck1
let promise
let noOfRows
var i,j;
var i1,j1;
var k,l;
var funcs = [];
for (i = 0; i < 2; i++) {
let index = i;
funcs[i] = function(index) {
promises.push(element(by.model('vm.citizenships['+index+'].citizenshipCd')).all(by.tagName('option')).getText().then((CitizenValueList) => {
var dropdown = table.rows()[index][1].split(";")
for (i1 = 0; i1 < dropdown.length; i1++) {
dropcheck = false;
for (j1 = 0; j1 < CitizenValueList.length; j1++) {
if (dropdown[i1] === CitizenValueList[j1]) {
dropcheck = true;
break;
}
}
if (!dropcheck) {
callback("Passed value: '" + dropdown[i1] + "' not found")
}
}
for (k = 0; k < CitizenValueList.length; k++) {
dropcheck1 = false;
for (l = 0; l < dropdown.length; l++) {
if (CitizenValueList[k] === dropdown[l]) {
dropcheck1 = true;
break;
}
}
if (!dropcheck1) {
callback("Application value: '" + CitizenValueList[k] + "' not found in expected")
}
}
}))
}.bind(null, i);
}
for (j = 0; j < 2; j++) {
funcs[j]();
}
Promise.all(promises).then(() => {
callback();
}, (error) => {
callback(error);
});
}
}
【问题讨论】:
标签: selenium typescript protractor cucumber