使用element.all(by.binding)时索引超出范围

时间:2016-05-13 15:20:02

标签: protractor

用户流程:搜索案例>>在该案例中搜索项目>>期望返回的结果数匹配值

describe('Search', function () {

  beforeEach(function () {
    loginPage.signIn();
    loginPage.login(username, password);
  });

  afterEach(function () {
    homePage.logOut();
  });

  it('alecxes suggestion code', function () {
    var presenceOfAll = function(elementArrayFinder) {
      return elementArrayFinder.count().then(function (count) {
        return count > 0;
      });
    };

    homePage.searchForCase(test_case);
    filterSearchMenu.searchWithinCase(search_argument);
    var hits = element.all(by.binding('response.hits.total'));
    browser.wait(presenceOfAll(hits), TIMEOUT);

    expect(element.all(by.binding('response.hits.total')).count()).toEqual(4);
  });
});

失败 预期4 <0>

describe('Search', function () {

  searchResultTotal = element(by.binding('response.hits.total'));

  beforeEach(function () {
    loginPage.signIn();
    loginPage.login(username, password);
  });

  afterEach(function () {
    homePage.logOut();
  });

  it('should be able to search', function () {
    homePage.searchForCase(test_case);
    filterSearchMenu.searchWithinCase(search_argument);
    browser.wait(EC.visibilityOf(searchResultTotal), TIMEOUT).then(function () {
      expect(element.all(by.binding('response.hits.total')).count()).toEqual(4);
    });
  });
});

有效,但返回的是警告,发现有多个元素找到了定位器by.binding('response.hits.total')

describe('Search', function () {

  beforeEach(function () {
    loginPage.signIn();
    loginPage.login(username, password);
  });

  afterEach(function () {
    homePage.logOut();
  });

  it('should be able to search', function () {
    homePage.searchForCase(test_case);
    filterSearchMenu.searchWithinCase(search_argument);
    browser.wait(EC.visibilityOf(element.all(by.binding('response.hits.total')).first()), TIMEOUT).then(function () {
      expect(element.all(by.binding('response.hits.total')).count()).toEqual(4);
    });
  });
});

失败并抛出超出范围的索引

第二组眼睛和任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您还可以使用自定义预期条件解决此问题,该检查将检查是否有超过0个元素与找到的定位器匹配:

var presenceOfAll = function(elementArrayFinder) {
  return elementArrayFinder.count().then(function (count) {
    return count > 0;
  });
};

var hits = element.all(by.binding('response.hits.total'));
browser.wait(presenceOfAll(hits), TIMEOUT);

expect(element.all(by.binding('response.hits.total')).count()).toEqual(4);

答案 1 :(得分:0)

我在想visibilityOf不喜欢多个元素。尝试:

browser.wait(EC.visibilityOf(element.all(by.binding('response.hits.total')).first()), TIMEOUT);