vollthegreat
@vollthegreat
Laravel back-end outsource

Как вернуть unresolved promise?

Работаю с Селениумом, и хочу выделить отдельную функцию. Структура существующего кода:
driver.then(_=> driver.wait(until.elementLocated(By.css()))
.then(_=>driver.findElement(By.css()).click());

Хочу заменить на:
driver.then(_=> driver.getElementByCss().click());
Функция выглядит как
function getElementByCss(path){
return   driver.wait(until.elementLocated(By.css()))
.then(_=>driver.findElement(By.css()))
}

Но функция, дожидаясь елемента, решает driver.findElement(), и возвращает результат, а не сам обьект "driver.findElement()"

как сделать так что бы возвращался объект, нерешенного промиса?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Во-первых, так работать не будет, потому что у промисов нет метода click(), а ваш вызов
driver.getElementByCss().click() дословно читается как: вызвать метод результата выполнения функции driver.getElementByCss(), который вы хотите чтобы был промисом.

Если уж на то пошло, то должно быть как-то так:
driver.then(_=> driver.getElementByCss().then(el=>el.click()));

driver.prototype.getElementByCss(){
    return new Promise((resolve, reject) => {
        driver.wait(until.elementLocated(By.css())).then(_=>resolve(driver.findElement(By.css()));
    });
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы