var codeSMS = [];
it ('Тестируем через нажатие кнопки', function() {
main_page.fieldTextSMS().getText().then(function(text) {
codeSMS.push(text.match(/\d{4}/g) + "\n");
});
console.log(codeSMS);
P.S.: Заметил баг тут, что если ввести в названии темы менее 40 символов, заполнить все поля и нажать кнопку “Создать тему”, то выскочит попап на поле названия темы. Его закрыть. И когда начинаю что-то дописывать в названии темы, то он сразу опять появляется и перекрывает мне все поле ввода.
Всё отрабатывает, просто вы вызываете push в промисе, который выполняется уже после того как пройдет console.log(codeSMS). В Protractor же всё выполняется асинхронно через browser.controlFlow, который создает иллюзию синхронности. Рекомендую ознакомится с этой темой и промисами более детально, это очень необходимо для написания тестов и вообще для работы с JS. Вот тут хорошо описано это angularjs - Using protractor with loops - Stack Overflow
Алексей Щербин использование js это требование кот вы не можете обойти - ?
js could be tough…
You may use ‘real’ protractor if javascript is language of your choice, or the C# or java ports of the same - these are as good as the ‘real’ one, but one is not forced to give up c# or java skills / frameworks
There is also php port i do not know enough to recommend
сергей - один из контрибуторов туда
Не пытайтесь синхронизировать асинхронный код, вам нужно продолжать писать асинхронно. Никакой гарантии что если вы в коде написали по порядку - команды будут выполнятся в том же порядке. Асинхронность это другой подход в организации потока выполнения кода. Ознакомьтесь с официальной документацией селениума по промисам и controlflow - selenium-webdriver/lib/promise
Не слишком понятно что вы хотите потестировать этим тестом, можете приложить весь тест?
Если вам нужно просто проверить формат текста смс кода - используйте матчер - .toMatch() - Redirecting…
it ('Тестируем через нажатие кнопки', function() {
var codeSMS = main_page.fieldTextSMS().getText()
expect(codeSMS).toMatch(/\d{4}/g) + "\n", 'SMS code must be in valid format')
});
@sergueik
Команда Angular выпустила специальный блокирующий прокси который будет ждать стабильности приложения прежде чем выполнять ваши команды. Попробуйте использовать его.
When to NOT use?
When you can use the original Protractor framework
Сами разработчики библиотек которые вы предлагаете рекомендуют использовать ProtractorJS. JavaScript отличный язык, у него есть свои особенности такие как асинхронность выполнения (которая кстати есть и в других языках), прототипная модель наследования, возможность писать как в ООП так и в функциональном стиле и нестрогая типизация. Это очень непривычно для людей которые привыкли к тому что язык четко ограничивает вас как вам писать код (java, c#). Но менять язык только потому что какая-то концепция языка непонятна и лень потратить пару дней на обучение - неправильно. Вы же не меняете дома кран на ведро с водой, только потому что не знаете как установить кран?
Мой тест должен идти на другой ресурс, копировать по указанному набору селекторов с учетом прописанных паттернов (так как там помимо цифр еще и слова есть, а мне нужны только цифры) в массив код, возвращаться на первый ресурс и вставлять из массива код в соответствующее поле.
Console.log я вставлял для того, что бы понять что написанный паттерн работает. А оно вот как получается. И я не вижу ошибку. Возможно есть какие дебагеры для этого