В стандартной конфигурации Protractor тесно интегрирован с Jasmine, которая обеспечивает базовый набор возможностей для написания тестов и проверки результатов. Однако в профессиональной практике часто возникает необходимость использовать более гибкие или функционально насыщенные библиотеки для assertions, такие как Chai, Expect.js или Should.js. Это позволяет создавать более читаемые тесты, использовать расширенные методы проверки и интегрироваться с другими инструментами.
Chai предоставляет три основных интерфейса: should,
expect и assert. В контексте Protractor чаще
используется expect из-за его декларативного синтаксиса и
читаемости тестов.
const chai = require('chai');
const expect = chai.expect;
describe('Пример использования Chai с Protractor', () => {
it('Проверка заголовка страницы', async () => {
await browser.get('https://example.com');
const title = await browser.getTitle();
expect(title).to.equal('Example Domain');
});
});
Ключевые моменты:
expect().to.equal(),
expect().to.include() и expect().to.be.true
делают тесты более выразительными.async/await, так как Protractor взаимодействует с
элементами страницы через Promises.Для работы с асинхронными результатами Chai предлагает расширение
chai-as-promised, которое позволяет проверять промисы
напрямую, без явного await.
const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
const expect = chai.expect;
it('Проверка текста элемента', () => {
const elementText = element(by.css('h1')).getText();
return expect(elementText).to.eventually.equal('Welcome');
});
Особенности:
eventually ожидает разрешения промиса и
автоматически проверяет его результат.Should.js применяет расширение прототипа объекта и
предоставляет цепочные методы проверки. В Protractor она используется
вместе с асинхронными функциями:
const should = require('should');
it('Элемент должен быть видимым', async () => {
const myElement = element(by.id('my-element'));
const isDisplayed = await myElement.isDisplayed();
isDisplayed.should.be.true();
});
Особенности:
Чтобы использовать сторонние библиотеки assertions, необходимо
изменить конфигурационный файл protractor.conf.js:
exports.config = {
framework: 'mocha',
mochaOpts: {
reporter: 'spec',
timeout: 30000
},
onPrepare: () => {
const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
global.expect = chai.expect;
}
};
Примечания:
chai-as-promised в onPrepare
позволяет использовать expect().to.eventually во всех
тестах без повторного импорта.async/await или chai-as-promised
— обязательное условие корректной работы.mochawesome, allure), что упрощает анализ
результатов тестирования.expect.Использование альтернативных assertion библиотек расширяет возможности Protractor, делая тесты более гибкими, выразительными и адаптированными под современные требования автоматизированного тестирования.