Проверка на истинность или ложность — фундаментальный элемент
автоматизированного тестирования. В Protractor такие проверки
используются для подтверждения корректного состояния элементов
интерфейса, результатов вычислений, условий отображения и поведения
приложения в целом. Основа всех подобных проверок — логические
выражения, возвращающие true или false, и
механизм утверждений (assertions), встроенный в тестовый фреймворк.
В типичном проекте на Protractor используется Jasmine или Mocha +
Chai. Для Jasmine центральным элементом является функция
expect, принимающая фактическое значение и сравнивающая его
с ожидаемым с помощью matcher’ов.
Простейшая форма проверки:
expect(value).toBe(true);
expect(value).toBe(false);
Matcher toBe выполняет строгое сравнение
(===). Он подходит, когда требуется проверить именно булево
значение, а не просто «truthy» или «falsy».
В ряде случаев результатом выражения может быть не чистый boolean, а значение, приводимое к нему. Для таких ситуаций используются matcher’ы:
expect(value).toBeTruthy();
expect(value).toBeFalsy();
Особенности:
toBeTruthy() проходит для любых значений, приводимых к
truetoBeFalsy() проходит для false,
0, '', null,
undefined, NaNЭто удобно при проверке наличия данных, но опасно при логике, где важно строгое булево состояние.
Большинство проверок на истинность в Protractor связано с состоянием
DOM-элементов. Protractor предоставляет методы, возвращающие
Promise<boolean> или уже резолвленные значения (в
зависимости от версии).
Примеры типовых проверок:
expect(element(by.id('submit')).isDisplayed()).toBe(true);
expect(element(by.css('.error')).isPresent()).toBe(false);
На практике чаще используются более выразительные формы:
expect(element(by.id('submit')).isDisplayed()).toBeTruthy();
expect(element(by.css('.loader')).isPresent()).toBeFalsy();
Protractor предоставляет набор методов, напрямую предназначенных для логических проверок:
isDisplayed() — элемент видим пользователюisPresent() — элемент существует в DOMisEnabled() — элемент доступен для взаимодействияisSelected() — элемент (checkbox, radio) выбранПример комплексной проверки:
const checkbox = element(by.css('input[type="checkbox"]'));
expect(checkbox.isPresent()).toBe(true);
expect(checkbox.isEnabled()).toBe(true);
expect(checkbox.isSelected()).toBe(false);
В старых версиях Protractor и при отключённом
SELENIUM_PROMISE_MANAGER булевы значения часто
обрабатываются через then:
element(by.id('status')).isDisplayed().then(function(result) {
expect(result).toBe(true);
});
Такой стиль полезен, когда требуется дополнительная логика перед
утверждением, но в большинстве случаев предпочтительнее прямое
использование expect.
Логические проверки часто строятся на сравнении чисел, строк или длин коллекций:
expect(items.count() > 0).toBe(true);
expect(text.includes('Success')).toBeTruthy();
В таких случаях важно помнить, что:
count() возвращает PromiseКорректный вариант:
items.count().then(function(count) {
expect(count > 0).toBe(true);
});
Проверка на ложность часто важнее проверки на истинность, особенно при валидации ошибок, загрузчиков и временных состояний:
expect(errorMessage.isDisplayed()).toBe(false);
expect(loader.isPresent()).toBeFalsy();
Такие проверки помогают убедиться, что приложение не находится в ошибочном или переходном состоянии.
Jasmine предоставляет модификатор not, позволяющий
инвертировать любое утверждение:
expect(isLoggedIn).not.toBe(true);
expect(button.isEnabled()).not.toBeFalsy();
Инверсия повышает читаемость, когда логика теста формулируется через отрицание условия.
Допускается проверка составных условий, объединённых логическими операторами:
const isVisible = element.isDisplayed();
const isEnabled = element.isEnabled();
Promise.all([isVisible, isEnabled]).then(function(values) {
const result = values[0] && values[1];
expect(result).toBe(true);
});
Подобный подход применяется при тестировании состояний, зависящих от нескольких факторов.
Сравнение с true вместо проверки
значения:
expect(value == true).toBe(true);
Корректнее:
expect(value).toBe(true);
Проверка Promise без ожидания:
expect(element.isDisplayed()).toBe(true); // работает только при auto-wait
При ручном управлении асинхронностью требуется then или
async/await.
Современный стиль делает проверки более линейными и читаемыми:
const isVisible = await element(by.id('panel')).isDisplayed();
expect(isVisible).toBe(true);
Для ложных значений:
const exists = await element(by.css('.temp')).isPresent();
expect(exists).toBe(false);
Такой подход минимизирует ошибки, связанные с асинхронностью.
Булевы проверки часто применяются в if, но в тестах
предпочтительнее использовать assertions:
const isErrorVisible = await error.isDisplayed();
if (isErrorVisible) {
expect(isErrorVisible).toBe(true);
}
Это гарантирует, что тест явно зафиксирует состояние, а не просто выполнит ветку кода.
Проверки на истинность и ложность формируют основу логики тестов Protractor. Они используются для:
Точность выбора matcher’а и понимание различий между
true, truthy, false и
falsy напрямую влияет на надёжность и предсказуемость
автотестов.