我试图做一个循环到一个循环的循环,并得到一个。Cannot red property 'getText' of undefined
错误。
这是我的代码。
element.all(by.className('col-md-4 ng-scope')).then(function(content) {
element.all(by.className('chart-small-titles dashboard-alignment ng-binding'))
.then(function(items) {
for(var i = 0; i<=content.length; i++) {
items[i].getText().then(function(text) {
expect(text).toBe(arrayTitle[i]);
});
}
});
element.all(by.className('mf-btn-invisible col-md-12 ng-scope'))
.then(function(itemsText) {
for(var i=0; i<=content.length; i++) {
for(var x = 0; x<=arrayContent.length; x++) {
itemsText[i].getText().then(function(textContent) {
expect(textContent).toBe(arrayContent[x]);
});
}
}
});
});
我使用的是 .then
在 .getText()
所以我不知道会发生什么。
你现在的主要问题是你写了30行代码,而且你一次调试了所有的代码。也许有1000行可能的问题。出于这个原因,没有人会帮助你,因为我不想浪费我的时间,自己瞎猜。但是如果你重新整理你的代码,让你可以逐行调试它们,那么每一行可能只有几个问题。
说到这里,不要再使用回调了,我看得出你并没有完全理解它们的作用。相反,开始使用 async/await
. 看看这有多简单... 你在问题中的代码会是这样的
// define elementFinders
let content = element.all(by.className('col-md-4 ng-scope'));
let items = element.all(by.className('chart-small-titles dashboard-alignment ng-binding'));
let itemsText = element.all(by.className('mf-btn-invisible col-md-12 ng-scope'));
// get element quantity
let contentCount = await content.count();
let itemsTextCount = await itemsText.count();
// iterate
for(var i = 0; i<contentCount; i++) {
// get text
let text = await items.get(i).getText();
// assert
expect(text).toBe(arrayTitle[i]);
}
// iterate
for(var i=0; i<contentCount; i++) {
for(var x = 0; x<itemsTextCount; x++) {
// get text
let text = await itemsText.get(i).getText();
// assert
expect(text).toBe(arrayContent[x]);
}
}
这样你就可以 console.log
任意一个变量,看看你的代码哪里出了问题