在 IF 语句中使用 async/await

问题描述 投票:0回答:2

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

if (await this.button.isEnabled()) {
  await this.text.sendKeys('abc');
  await this.send.click();
}
protractor
2个回答
3
投票

用于同步 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”。


2
投票

你记得声明你的函数吗

async
?这对我的应用程序有用:

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

doStuff();

这不太必要(我不需要它),但如果您运行的是旧版本的 Protractor,您可能必须在 protractor.config 中禁用

Selenium Promise Manager

exports.config = { 
  ...
  SELENIUM_PROMISE_MANAGER: false,
  ... 
};
© www.soinside.com 2019 - 2024. All rights reserved.