Javascript 从要使用量角器测试的服务器异步加载的动态数据列表列表

Javascript 从要使用量角器测试的服务器异步加载的动态数据列表列表,javascript,angularjs,protractor,karma-jasmine,Javascript,Angularjs,Protractor,Karma Jasmine,我有一个由列表组成的布局 在用户单击的每一行上,从服务器检索其子列表,并呈现一些信息,包括货币数量 如何迭代所有列表项和每个元素块,或等待数据被检索和呈现,以便测试呈现的数量是否正确 当然,所有这些都是使用量角器进行的 我以前尝试过使用类似的东西: var listItemsSelection = element.all(by.css('.listItem')), listItemsExpandSelection = element.all(by.css('.icons-Ex

我有一个由列表组成的布局

在用户单击的每一行上,从服务器检索其子列表,并呈现一些信息,包括货币数量

如何迭代所有列表项和每个元素块,或等待数据被检索和呈现,以便测试呈现的数量是否正确

当然,所有这些都是使用量角器进行的

我以前尝试过使用类似的东西:

var listItemsSelection       = element.all(by.css('.listItem')),
    listItemsExpandSelection = element.all(by.css('.icons-Expand'));

describe('Data screen - Rows', function () {
  //Given
  beforeEach(function () {
    for (var i = 0; i < listItemsExpandSelection.count(); i++) {
      listItemsExpandSelection.get(i).click();

      browser.wait(function() {
        return browser.isElementPresent(elm);
      }, 500);
    }
  });

  it('Element exist and is informed properly', function () {
    listItemsExpandSelection.each(function (el) {
      var elm = el.element(by.css(".amountCell"));

      expect(el.element(by.css('amountCell'))).toBe('5,50 €');
    });

  });
});
这是迭代选择的另一种方式,我得到一个错误,如:“UnknownError:unknown error:Element在点(941524)处不可单击。Other”。因为,在每个单击的行上,都会检索并显示新数据,所以下一个同级会向下推一点,因此不可单击

HTML代码段如下所示:

当第一行仍然未单击时:

<ul>
  <li class="listItem"><i class="icons-Expand"></i></li>
  <!-- n elements -->
</ul>
单击并等待几毫秒后:

<ul>
  <li class="listItem">
    <i class="icons-Expand"></i>
    <ul>
      <li class="listSubItem"></li>
      <!-- n sub-elements -->
    </ul>
  </li>
  <!-- n elements -->
</ul>

有什么想法吗?

我认为您应该单击
li
元素,等待子列表出现:

var EC = protractor.ExpectedConditions;

listItemsSelection.each(function (el) {
    el.click();

    browser.wait(EC.presenceOf(el.element(by.css("li.listSubItem"))), 10000);

    // make expectations
});

请提供嵌套列表的HTML表示形式。已更新并添加HTML表示形式。谢谢。此解决方案无法按预期工作。为什么?只是因为在每个新添加的子列表上,DOM层次结构都在增长,其余的“click()”事件不会按预期触发,原因是:“未知错误:未知错误:元素在点(896655)处不可单击。其他元素将收到单击:“@DavidPelayo它是内部还是公共应用程序?”?换句话说,我有没有可能重现这个问题?谢谢。对我来说,理想的场景应该是这样的:在每个语句的每次迭代中,JS应该以某种方式等待,直到click()操作完成,然后浏览器等待子元素的出现,期望运行,然后继续迭代,但我无法想象这样的代码会是什么样子。是的,它不是公共的,因此无法访问。请尝试反转数组。在这种情况下,列表向下增长,并且始终保持在顶部。另一个选项是使用Javascript滚动(您可以获得元素的定位器:),我将尝试一下,然后返回反馈。谢谢
var EC = protractor.ExpectedConditions;

listItemsSelection.each(function (el) {
    el.click();

    browser.wait(EC.presenceOf(el.element(by.css("li.listSubItem"))), 10000);

    // make expectations
});