在IF循环中使用async / await

时间:2018-04-16 11:59:16

标签: protractor

我是量角器的新手。我目前正在使用量角器编写自动化测试来检查元素是否已启用并仅在启用元素时执行操作。以下是我的代码。我想使用async / await但是当我使用async await时,测试永远不会进入循环。但即使没有执行,测试也会通过。请帮忙。

if (await this.button.isEnabled()) {
  await this.text.sendKeys('abc');
  await this.send.click();
}

2 个答案:

答案 0 :(得分:0)

你还记得宣布你的职能async吗?这适用于我的应用程序:

async function doStuff() {
  if (await page.button.isEnabled()) {
    console.log('enabled');
  } else {
    console.log('disabled');
  }
}

doStuff();

这不大可能是必要的(我不需要它),但如果您运行的是较旧版本的Protractor,则可能需要禁用protractor.config中的Selenium Promise Manager:< / p>

exports.config = { 
  ...
  SELENIUM_PROMISE_MANAGER: false,
  ... 
};

答案 1 :(得分:0)

用于同步 if 块和 if 块之后的逻辑。 创建一个带有 if 逻辑的异步函数。喜欢以下

async a(){
  async function b() {
    if(condition){ 
      //await async call
      await new Promise((resolve, reject) => {
         setTimeout(function(){
            resolve("successful");
          }, 10000);
        });
      }
  }
  await b(); 
  console.log('now');
  //post if synchronous logic 
}

在上面的代码中,“now”只会在 10 秒后打印。如果您在 b() 之前删除 await,则在 10 秒结束之前将立即打印“now”。