从selenium webdriver承诺获得最终输出的简明方法
我有以下代码使用selenium webdriver来获取元素的文本:
async function getText(driver, locator) {
return await (await driver.findElement(locator)).getText();
}
我可能有些脑雾,但有没有更简洁的方法来编写这段代码?
我有一些其他功能需要更多的承诺链 - 它会变得混乱,所以我想找到一个很好,简洁的方法来编写函数。
该函数只需要返回文本,我不希望它返回一个promise。
回答如下:一般来说,更清晰,更易读的方法是使用临时变量:
async function getText(driver, locator) {
const el = await driver.findElement(locator);
return el.getText();
}
没有必要使用return await
,除非你用try
包装它。
Selenium使用装饰的承诺,允许在内部安排承诺链。可以在getText
上安排WebElementPromise行动,结果将是getText
的承诺:
function getText(driver, locator) {
return driver.findElement(locator).getText();
}
Selenium的设计方式是在async..await
出现之前编写类似同步的代码。代码保持异步。
该函数只需要返回文本,我不希望它返回一个promise。
这是this problem的一个特例。一旦代码异步,就无法再次进行同步。一旦涉及到promises,所有调用堆栈都应使用promises来获得正确的控制流。