javascript - 从 selenium webdriver promise 获得最终输出的简洁方法

标签 javascript node.js selenium-webdriver promise async-await

我有以下代码,它使用 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/

相关文章:

python - 如何在特定版本的 Firefox(使用 Python)中运行 webdriver 测试?

java - 如何通过 Selenium Webdriver 检索元素的 HTML?

javascript - 从本地主机或文件 ://访问 JSON 服务

javascript - 如何优化正则表达式?

javascript - GMail Contexual Gadget - 多种模式可匹配多个条件

javascript - Javascript (Node.js) 中的简单命令行提示符

javascript - Angular 2 App 中项目之间没有逗号的数据绑定(bind)

node.js - 如何判断node.js应用程序环境支持样式/彩色控制台输出?

node.js - 首先完成一个 HTTP post 请求,然后再循环执行下一个 HTTP post 请求

java - 即使我捕获它,也会抛出 NoSuchElementException 吗?