如何用 "async/await" 而不是“.then”重写关闭当前选项卡函数?

How to rewrite closing current tab function with "async/await" instead of ".then"?

为了在我的测试中关闭当前选项卡,我使用了下一个函数:

browser.getAllWindowHandles().then((handles) => {
    browser.driver.switchTo().window(handles[1]);
    browser.driver.close();
    browser.driver.switchTo().window(handles[0]);
});

而且效果很好。但我必须重写为“async/await”而不是“.then”。我试试下一个代码:

async function goBackToPreviousTab () {
    let handles = await browser.getAllWindowHandles();
    browser.driver.switchTo().window(handles[1]);
        browser.driver.close();
        browser.driver.switchTo().window(handles[0]);
}

但结果收到下一个错误:

没有这样的 window: 目标 window 已经关闭 来自未知错误:未找到网络视图

首先要明白.thenawait是一种解析Promise的方式。因此,无论 returns 一个 promise 需要被显式解决。例如,.close() returns 也是一个 Promise,并且需要语法

这就是为什么,回到你的问题,你的功能应该是

async function goBackToPreviousTab () {
    let handles = await browser.getAllWindowHandles();
    await browser.driver.switchTo().window(handles[1]);
    await browser.driver.close();
    await browser.driver.switchTo().window(handles[0]);
}

因为你的每个命令都是一个 Promise