Javascript 量角器点击元素并计算子元素
我在循环收集元素并使用量角器单击每个元素时遇到了计算子元素的问题。我对这一点很陌生,花了很多时间试图找出解决方案 我当前的代码如下所示:Javascript 量角器点击元素并计算子元素,javascript,jasmine,protractor,Javascript,Jasmine,Protractor,我在循环收集元素并使用量角器单击每个元素时遇到了计算子元素的问题。我对这一点很陌生,花了很多时间试图找出解决方案 我当前的代码如下所示: function clickThroughElements(elements) { var amountOfChildElements = 0; for(var i in elements) { var element = elements[i]; element.click();
function clickThroughElements(elements) {
var amountOfChildElements = 0;
for(var i in elements) {
var element = elements[i];
element.click();
element.all(by.css('div')).then(function(elements) {
amountOfChildElements += elements.length;
});
}
return amountOfChildElements;
}
显然,我在返回时得到了0,因为amountOfChildElements的增量是异步发生的。有谁能推荐一下如何正确地返回amountOfChildElements吗?您可以使用量角器的
.each()
和.count()
来解决这个问题。这将使一切保持异步
大致如下:
var totalChildren = 0;
var parents = element.all(by.css('div.class'));
// iterate through parent, equivalent of a for loop
parents.each(function (parent) {
// parent is the element with the current index of your loop
parent.click();
// chain locator calls to parent, ensuring you are finding the correct child
// associated with the correct parent element
parent.all(by.css('div')).count().then(function (count) {
// count children of the current parent element
totalChildren += count;
});
});
参考资料:当涉及承诺时,您应该避免循环 获取计数的一种方法是首先使用
map
将所有计数作为承诺数组获取。然后使用promise解决这些问题。所有
并使用reduce
聚合值:
function clickThroughElements(elements) {
var counts = elements.map(e => {
e.click();
return e.all(by.css('div')).count();
});
return protractor.promise.all(counts).then(values => {
return values.reduce((acc, value) => acc + value, 0);
});
}
用法:
clickThroughElements(elements).then(count => {
console.log(count);
});
嘿,我不确定我是否理解这个问题,它只是计算元素中包含的子元素吗?这将做一些基本的事情你也看到这个帖子了吗?工作就像魅力!非常感谢您的解决方案!