不能红色属性'getText'protractor。

问题描述 投票:0回答:1

我试图做一个循环到一个循环的循环,并得到一个。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() 所以我不知道会发生什么。

protractor
1个回答
2
投票

你现在的主要问题是你写了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 任意一个变量,看看你的代码哪里出了问题

© www.soinside.com 2019 - 2024. All rights reserved.