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
});