Для инженера по автоматизации понимание Scope (области видимости) — критически важный навык.
Именно из-за него возникают ошибки вроде:
«Я же только что нашел элемент в цикле, почему я не могу использовать его дальше?»
В этом видео мы разбираем:
что такое Scope простыми словами,
почему let и const имеют блочную область видимости,
почему переменные “умирают” после { },
как правильно проектировать тесты, чтобы данные были доступны там, где нужно.
Официальное определение:
Область видимости — это контекст выполнения, в котором переменные «видны» или доступны. `let` и `const` имеют блочную область видимости, то есть они существуют только внутри пары фигурных скобок `{ }`, где были объявлены.
Простыми словами:*Это «зона доступа». Если ты создал переменную внутри функции, цикла или условия `if`, она заперта там на замок. Снаружи ты её не достанешь.
Пример 1: Ошибка видимости в UI-тесте
Представь, что ты ищешь текст ошибки на странице внутри блока `if`.
if (isErrorVisible) {
const errorMessage = "Invalid password"; // Переменная создана ВНУТРИ блока
console.log(errorMessage); // Здесь она работает
}
// Попытка использовать сообщение для финального отчета в конце теста:
console.log("Тест завершен с ошибкой: " + errorMessage);
// РЕЗУЛЬТАТ: ReferenceError: errorMessage is not defined
// Тест упадет, потому что errorMessage "умерла" сразу после закрывающей скобки }.
```
Пример 2: Переменные в блоке `try...catch`
В тестах мы часто используем `try...catch`, чтобы тест не падал при первой же ошибке. Это классический пример, где новички теряют переменные.
try {
const response = await api.get('/user/1'); // Переменная заперта внутри try
let status = response.status;
} catch (error) {
console.log("Запрос не удался");
}
// Мы хотим проверить статус в конце теста
// console.log(status); // ОШИБКА! status не виден вне блока try.
// КАК ПРАВИЛЬНО:
let status; // Объявляем снаружи (внешний scope)
try {
const response = await api.get('/user/1');
status = response.status; // Присваиваем значение внутри
} catch (e) { /*...*/ }
console.log(status); // ТЕПЕРЬ РАБОТАЕТ!
```
Пример 3: Циклы (перебор элементов)
Когда мы перебираем строки таблицы или список товаров, переменная цикла живет только внутри этого перебора.
const items = ["Apple", "Banana", "Cherry"];
for (let i = 0; i меньше items.length; i++) {
const currentItem = items[i];
console.log(`Проверяем товар: ${currentItem}`); // Работает внутри
}
// console.log(currentItem); // ОШИБКА! Переменная currentItem существовала только пока работал цикл.
```
Итог:
Если вы объявили переменную внутри `{ }`, помните: "всё, что было в Лас-Вегасе (внутри скобок), остается в Лас-Вегасе."
Чтобы использовать данные снаружи, нужно объявить переменную (через `let`) ДО начала блока со скобками.