如何有条件地单击量角器中的元素?

How to conditionally click an element in Protractor?

在量角器测试中,如果弹出窗口出现(并非总是如此),我需要将其关闭并照常进行测试。这是我必须这样做的代码-

let checkForPopUp = async function() {
  element(by.css('button[id="gdprStopEmails"]')).isPresent().then(function (isVisible) {
    return isVisible;
  });
}

it('description', async function() {
      let hasPopUp = await checkForPopUp();
      if(hasPopUp) {
        await element(by.id("gdprStopEmails")).click();
      }
      await connectedAccounts.revokePermission(partnerInfo.revokeId, partnerInfo.confirmRevokeId);
    });

我 运行 这个测试了几次,但没有检查元素是否存在,每次它存在时它都会关闭弹出窗口(如果不存在则测试失败)。自从我引入条件检查以来,它一次也没有关闭弹出窗口,尽管我尽了最大的努力,但我还是无法弄清楚发生了什么。你们有什么想出来的吗?提前致谢!

你不见了return。您的函数 returns 没有任何明确的内容,因此隐式地 returns undefined 始终是虚假的,并且您的 if 块不会被执行

这应该有效

let checkForPopUp = async function() {
  return element(by.css('button[id="gdprStopEmails"]')).isPresent().then(function (isVisible) {
    return isVisible;
  });
}

it('description', async function() {
      let hasPopUp = await checkForPopUp();
      if(hasPopUp) {
        await element(by.id("gdprStopEmails")).click();
      }
      await connectedAccounts.revokePermission(partnerInfo.revokeId, partnerInfo.confirmRevokeId);
    });

但由于您使用的是 async/await,因此请不要混用语法。我会这样做

let checkForPopUp = async function() {
  return element(by.css('button[id="gdprStopEmails"]')).isPresent()
}

it('description', async function() {
      let hasPopUp = await checkForPopUp();
      if(hasPopUp) {
        await element(by.id("gdprStopEmails")).click();
      }
      await connectedAccounts.revokePermission(partnerInfo.revokeId, partnerInfo.confirmRevokeId);
    });

请记住,isPresent 不能保证可见性