尝试使用 async/await 而不是 browser.sleep,但它不起作用

Trying to use async/await instead of browser.sleep, but it does not work

我是量角器的新手,刚开始对 angular 应用进行自动化测试。我有一个测试,我需要使用多个 browser.sleep() 来实际等待元素呈现并单击它们。使用 browser.sleep() 它工作正常,但是当我尝试使用 async/await 时,测试失败,因为它不等待元素。

在使用 async/await

之前,我确实设置了 SELENIUM_PROMISE_MANAGER: false

这个有效:

browser.get(http://localhost);
browser.sleep(1000);
element(by.cssContainingText('.title1, 'text1')).click();
browser.sleep(1000);
element(by.cssContainingText('.title2', 'text2')).click();

这个不行,说找不到第二个元素:

it('should navigate to screen', async function() {
    browser.get(http://localhost);
    browser.wait(function () {
      return element(by.css('.top-navigation')).isPresent();
    }, 5000);
    await element(by.cssContainingText('.title1', 'text1')).click();
    await element(by.cssContainingText('.title2', 'text2')).click();
  });

等待!=等待

await 用于对 promise 链元素进行排队以添加同步性。在您的情况下,您应该在尝试与之交互之前添加等待元素。最简单的方法是创建一个等待元素的函数,然后传递所需的任何元素,如下所示:

声明预期条件:

const EC = protractor.ExpectedConditions; 

编写点击函数:

const clickElement = async function (element) {
    await browser.wait(EC.elementToBeClickable(element));
    await element.click();
};

然后使用它:

it('should navigate to screen', async function() {
    await browser.get(http://localhost);
    await clickElement(element(by.cssContainingText('.title1', 'text1')));
    await clickElement(element(by.cssContainingText('.title2', 'text2')));
});