如何用 "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 已经关闭
来自未知错误:未找到网络视图
首先要明白.then
或await
是一种解析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
为了在我的测试中关闭当前选项卡,我使用了下一个函数:
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 已经关闭 来自未知错误:未找到网络视图
首先要明白.then
或await
是一种解析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