В одном приложении в зависимости от различных условий появляется окошко с запросом, ну к примеру, на доступ к геолокации. Геолокация не нужна, поэтому стоит задача перехватывать появление окошка и закрывать ее по кнопке “Кнопка”. То есть, кнопка может быть, а может и не быть.
Как лучше идеологически сделать, помогите выбрать из двух вариантов (node js, async/await, wd.js):
Обернуть все в 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;
}
Вариант без 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 я бы использовал если бы кнопка должна быть всегда, но случилось что-то не предвиденное
вот отсюда и выходит мое предположение. Механизм обработки исключений нужен для обработки исключений (читай ошибок). Использовать try catch для проверки есть ли кнопка на странице для меня сродни использования allure steps etc для создания сайта