Краткий способ получить окончательный результат от обещаний селена webdriver - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть следующий код, который использует селеновый веб-драйвер для получения текста элемента:

async function getText(driver, locator) {
    return await (await driver.findElement(locator)).getText();
}

Возможно, у меня какой-то туман из мозга, но есть ли более чистый способ написания этого кода?

У меня есть некоторые другие функции, которые потребуют еще несколько цепочек обещаний - они станут грязными, поэтому я хочу найти хороший, краткий способ написания функций.

Функция простонужно вернуть текст, я не хочу, чтобы он возвращал обещание.

1 Ответ

0 голосов
/ 15 февраля 2019

Более простой и понятный способ для обещаний в целом - использовать временные переменные:

async function getText(driver, locator) {   
    const el = await driver.findElement(locator);
    return el.getText();
}

Нет необходимости использовать return await, если вы не заключите его в try.

* 1007.* Selenium использует оформленные обещания, которые позволяют планировать цепочки обещаний внутри.Можно запланировать действие getText на WebElementPromise , и в результате будет обещано getText:
function getText(driver, locator) {
    return driver.findElement(locator).getText();
}

Selenium был разработан таким образом, чтобы писать синхронный код до того, какПоявление async..await.Код остается асинхронным.

Функция просто должна вернуть текст, я не хочу, чтобы она возвращала обещание.

Это особый случай эта проблема .Если код асинхронный, его нельзя снова сделать синхронным.Как только обещания задействованы, весь стек вызовов должен использовать обещания для правильного потока управления.

...