Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

webdriver
javascript
Теги: #<Tag:0x00007fedb8124140> #<Tag:0x00007fedb8123fb0>

(Bolatbek) #1

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

Как лучше идеологически сделать, помогите выбрать из двух вариантов (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: пример условный, локаторы условные, элемент и окошко условные.


(Dzmitry Ihnatsyeu) #2

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


(Oleksandr Khotemskyi) #3

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

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


(Bolatbek) #4

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

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

(Валентина) #5

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

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

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


(Валентина) #6

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


(Oleksandr Khotemskyi) #7

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


(Bolatbek) #8

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


(Dzmitry Ihnatsyeu) #9

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


(Валентина) #10

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


(Валентина) #11

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