我有以下代码,它使用 selenium webdriver 来获取元素的文本:
async function getText(driver, locator) {
return await (await driver.findElement(locator)).getText();
}
可能是我脑子有雾,但是有没有更干净的方法来编写这段代码?
我还有一些其他函数,需要更多的 promise 链 - 它会变得困惑,所以我想找到一种好的、简洁的方法来编写函数。
该函数只需要返回文本,我不希望它返回 promise 。
最佳答案
一般来说,promise 的一种更清晰、更易读的方式是使用临时变量:
async function getText(driver, locator) {
const el = await driver.findElement(locator);
return el.getText();
}
没有必要使用returnawait
,除非你用try
包装它。
Selenium 使用修饰的 Promise 来允许在内部调度 Promise 链。可以在 WebElementPromise 上安排 getText
操作,结果将是 getText
的 Promise:
function getText(driver, locator) {
return driver.findElement(locator).getText();
}
Selenium 就是这样设计的,在 async..await
出现之前编写类似同步的代码。代码保持异步。
The function just needs to return the text, I don't want it to return a promise.
这是 this problem 的特例。一旦代码异步,就无法再次同步。一旦涉及到 Promise,所有调用堆栈都应该使用 Promise 来实现正确的控制流程。
关于javascript - 从 selenium webdriver promise 获得最终输出的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54707548/