Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Typescript 无法在量角器脚本代码中退出循环_Typescript_For Loop_Promise_Protractor_Ui Automation - Fatal编程技术网

Typescript 无法在量角器脚本代码中退出循环

Typescript 无法在量角器脚本代码中退出循环,typescript,for-loop,promise,protractor,ui-automation,Typescript,For Loop,Promise,Protractor,Ui Automation,我不熟悉量角器和打字脚本,正在使用它们编写自动化测试代码 我创建了一个方法作为 private allElements = $$('.some-list li'); public async getDateElement(calDate: string) { this.allElements.each(async function(element, index){ let eDate = await element.$('p').getText(); if

我不熟悉量角器和打字脚本,正在使用它们编写自动化测试代码

我创建了一个方法作为

 private allElements = $$('.some-list li');

 public async getDateElement(calDate: string) {
     this.allElements.each(async function(element, index){
      let eDate = await element.$('p').getText();
      if( eDate === calDate){
          // I tried both these options
          return eDate // getting undefined value here 
          return element.$('p').click(); // element get clicked but not coming out of loop
      }
    });
 }
我用for循环尝试了另一种方法,但break关键字在这里不起作用

public async getDateElement(calDate: string) {
for (let element of await this.allElements) {
  let eDate = await element.$('p').getText();
  if (eDate === calDate) {
    element.$('p').click();
    break;
  }
 }
}
所以不知道,如何返回或退出for循环。我也在谷歌上搜索过,有人建议使用try-catch块,并在日期匹配时抛出异常。这是唯一的解决办法吗?如果有人能够使用承诺提供解决方案,我们将不胜感激:)


如果需要更多信息,请告诉我。

如果一切都是同步的,请尝试以下量角器方法链:

public getDateElement(calDate: string) {
    return this.allElements
    .map(element => element.$('p'))
    .filter(p => p.getText() === calDate)
    .click();
}
或者,如果
.getText()
是异步的,则类似于此,但可能与上面的
.map()
阶段(异步版本)配合使用:

public async geDateElement(calDate: string) {    
    return this.allElements
    .filter(async element => await element.getText() === calDate)
    .click();
}

您可以尝试向
元素添加等待。$('p')。click()命令吗?
此.allegements
是一个iterable,而不是承诺,那么您为什么要等待它?想知道循环是否是正确的做法。看起来你可以过滤
这个。等位基因
创建一个包含感兴趣元素的集合,然后调用
元素。$('p')。单击()
@SankalanParajuli尝试过,但没有任何区别。你真是太棒了@Roamer-1888。它与过滤器一起工作,它只是一行代码。谢谢请将此添加到答案中,以便我可以接受。