Javascript 承诺和for循环-尝试验证多元素文本
我正在开发一个函数,该函数将在使用过滤器功能后读取元素的文本。我已经打印出返回的文本,它正在获取元素,但是我不认为我理解js的承诺。。activeFilters是我已经确定的一个变量Javascript 承诺和for循环-尝试验证多元素文本,javascript,selenium,protractor,chai,Javascript,Selenium,Protractor,Chai,我正在开发一个函数,该函数将在使用过滤器功能后读取元素的文本。我已经打印出返回的文本,它正在获取元素,但是我不认为我理解js的承诺。。activeFilters是我已经确定的一个变量 this.verifyColorFilterFunctional = function(color) { var bool = true; activeFilters.count().then(function (count) { var amt = count - 1;
this.verifyColorFilterFunctional = function(color) {
var bool = true;
activeFilters.count().then(function (count) {
var amt = count - 1;
for (var i = 0; i < amt; i++){
activeFilters.get(i).getText().then(function(text) {
bool = (color === text);
console.log(bool);
});
if (!bool) {
break;
}
}
});
return expect(bool).to.become(true);
};
this.verifyColorFilterFunction=函数(颜色){
var bool=真;
activeFilters.count().then(函数(count){
var金额=计数-1;
对于(var i=0;i
log根据需要打印true和false,但是我注意到了两件事。如果为false,它不会像我在if语句中告诉它的那样破裂。另外,我得到一个typeError:true不是一个可编辑的错误。。我相信这个逻辑在我脑子里听起来不错,但对JS来说却不是。任何帮助都将不胜感激 量角器的
元素。all()
支持getText()方法,该方法将返回元素中显示的文本作为数组。然后可以使用expect方法轻松比较结果数组
this.verifyColorFilterFunctional = function(color) {
activeFilters.getText().then(function (textArray) {
expect(textArray).to.equal(Array(textArray.length-1).fill(color));
});
}
这里有两个问题,首先你不能在异步方法上使用标准for循环,其次你!bool在你的承诺完成之前就被执行了。我的javascript非常弱。。。我尝试在promise中初始化变量,然后使用for循环,但是变量没有得到响应initialized@Nico,可以有多个元素进行验证。过滤器会更新我需要的结果,以确保在所有这些结果中,不管有多少显示(比如9个或更多)都有我想要的过滤器。我没有按照我的意愿写这条评论。现在就删除它。getText()不也会返回承诺吗?这段代码也不起作用:(是的,getText()将返回承诺。但是
expect
方法将等待承诺解析,然后将结果用于断言。那么,当您尝试上述解决方案时,会出现什么错误?不确定.toEqual
是否会等待解析。首先解析activeFilters.getText()。然后(函数(文本){
然后针对预期数组断言expect(文本)。toEqual(数组(text.length-1)。fill(color));
@Tree55Topz,您应该接受这个答案,因为它几乎是正确的。Sudharsan Selvaraj您能修复它吗?@FlorentB.更新了答案。谢谢!!