Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺和for循环-尝试验证多元素文本_Javascript_Selenium_Protractor_Chai - Fatal编程技术网

Javascript 承诺和for循环-尝试验证多元素文本

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;

我正在开发一个函数,该函数将在使用过滤器功能后读取元素的文本。我已经打印出返回的文本,它正在获取元素,但是我不认为我理解js的承诺。。activeFilters是我已经确定的一个变量

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.更新了答案。谢谢!!