我正在使用JavaScript测试框架,Protractor。
我有一个外部实用程序类文件,我用它来组织我的测试规范中的通用逻辑。见Using Page Objects to Organize Tests。
当我使用一段代码来解析一个承诺并将其放入我的Helper实用程序类文件中时,似乎存在一个问题。
示例:
在单个spec文件中,此代码按预期工作:
test.spec.js:
it('should display the Protractor workflow text', function() {
// match variable
var match = false;
// get elements by tag
var scanElements = element.all(by.css('div')).each(function(el) {
el.getText().then(function(text) {
var sp = text.split(' '); // split by <space>
for (var i = 0; i < sp.length; i++) {
if (sp[i] == 'Protractor') {
match = true;
}
}
});
});
// on complete
scanElements.then(function() {
console.log(match); // returns true
});
});
但是,如果我将此逻辑分隔到我的Helper实用程序类中,则返回值为undefined
。
Helper.js
/** containsText [process]
* searchs for text in tag elements (i.e. 'string' in <a>, 'string' in <div>)
* @param string - tag name to limit
* @param string - string value to search against
*
* @return boolean - if string is found
*/
this.containsText = function (tagName, stringValue) {
// match variable
var match = false;
// get elements by tag
var scanElements = element.all(by.css(tagName)).each(function(el) {
el.getText().then(function(text) {
var sp = text.split(' '); // split by <space>
for (var i = 0; i < sp.length; i++) {
if (sp[i] == stringValue) {
match = true;
}
}
});
});
// on complete
scanElements.then(function() {
return match;
});
}
test.spec.js
it('should display the Protractor workflow text', function() {
console.log(helper.containsText('div', 'Protractor')); // does not wait to resolve, returns undefined
});
编辑:Stack Overflow上类似问题的所有链接都必须通过Ajax请求处理异步调用。我正在为Protractor / Webdriver框架寻找解决方案。我已阅读有关使用Protractor创建承诺的文档,并尝试了以下内容:
Helper.js
this.containsText = function (tagName, stringValue) {
// get elements by tag
var scanElements = element.all(by.css(tagName)).each(function(el) {
el.getText().then(function(text) {
var sp = text.split(' '); // split by <space>
for (var i = 0; i < sp.length; i++) {
if (sp[i] == stringValue) {
return true; // fufill outer promise and break execution
}
}
});
});
return scanElements;
}
test.spec.js
helper.containsText('div', 'Protractor').then(function(f) {
console.log(f);
});
仍在寻找一些帮助。