Возник вопрос про обработку исключений (async/await) при ожидании элемента

В одном приложении в зависимости от различных условий появляется окошко с запросом, ну к примеру, на доступ к геолокации. Геолокация не нужна, поэтому стоит задача перехватывать появление окошка и закрывать ее по кнопке “Кнопка”. То есть, кнопка может быть, а может и не быть.

Как лучше идеологически сделать, помогите выбрать из двух вариантов (node js, async/await, wd.js):

  1. Обернуть все в try…catch
let element;
try {
    element = await driver.waitForElementByXPath('//android.widget.Button[@text="Кнопка"]', 5000);
    return element.click();
} catch (err) {
    console.log(`Не появилось диалоговое окно  такое-то, перехожу к следующему шагу`);
    console.log(err);
    return true;
 }
  1. Вариант без try…catch
let elements = await driver.waitForElementsByXPath('//android.widget.Button[@text="Кнопка"]', 5000);
if (elements.length > 0) {
    console.log(`Не появилось диалоговое окно такое-то, перехожу к следующему шагу`);
    return elements[0].click();
}

И главное - почему?
PS: пример условный, локаторы условные, элемент и окошко условные.

идеологически, я бы делал без try… catch. Данный механизм нужен для обработки ошибок и выполнения каких-либо recovery действий. В вашем же случае вы вполне осознанно ожидаете что кнопки может и не быть. Try…catch я бы использовал если бы кнопка должна быть всегда, но случилось что-то не предвиденное

Я бы делал через трай-кетч

Но зачем вы возвращаете true если кнопка не нажалась? Зачем вообще что-то возвращать из этой функции?

Можно и не возвращать. Не суть. Код теста - условный.
Просто есть возможность:

  • все загонять в try…catch
  • или же проверять на наличие кнопки и при необходимости жмакать на нее.
    А почему сделали бы через try?

А если бы обработка исключения происходила не через try … catch, а по старинке, через .then().catch() ?

Но использовать findelements для проверки наличия элемента как-то не совсем верно, т.к., на мой взгляд, назначение данной функции иное.

ps Не работает markdown тут, что ли.

Предполагается, что кнопка должна быть всегда.

Никакой разницы в функционале. async функции всеравно возвращают промис.

Как раз таки - не предполагается, что всегда. Иначе зачем городить проверку на наличие кнопки.

вот отсюда и выходит мое предположение. Механизм обработки исключений нужен для обработки исключений (читай ошибок). Использовать try catch для проверки есть ли кнопка на странице для меня сродни использования allure steps etc для создания сайта

При первом запуске приложения она должна появляться всегда

Вопрос был к автору топика.