Я думаю, что знаю теорию решения, но у меня возникают проблемы с ее внедрением. Рассмотрим следующий фрагмент кода:Повторное использование функций
this.selectFirstPassiveService = function() {
getFirstPassiveService().element(by.tagName('input')).click();
}
this.clickAddTask = function() {
getFirstActiveService().element(by.tagName('a')).click();
}
this.selectTask = function() {
getFirstActiveService()
.element(by.tagName('option'))
.$('[value="0"]')
.click();
}
this.saveTask = function() {
getFirstActiveService().element(by.name('taskForm')).submit();
}
getFirstActiveService = function() {
return services.filter(function (elem) {
return elem.getAttribute('class').then(function (attribute) {
return attribute === 'service active ';
});
}).first();
}
getFirstPassiveService = function() {
return services.filter(function (elem) {
return elem.getAttribute('class').then(function (attribute) {
return attribute === 'service passive ';
});
}).first();
}
};
Чтобы сводится на минимум дублирования кода, я создал две функции: * getFirstActiveService() * getFirstPassiveService()
Мой спецификации выглядит следующим образом:
it('Select service', function() {
servicePage.selectFirstPassiveService();
servicePage.clickAddTask();
servicenPage.selectTask()();
});
Оба clickAddTask() и selectTask() использовать функция, называемая getFirstActiveService(). Все работает отлично в clickAddTask(), но когда я использую функцию в selectTask(), некоторые элементы (которые присутствуют) не могут быть найдены транспортиром.
Здесь идет моя теория, каждая команда в getFirstActiveService() помещается в очередь в поток управления, когда функция вызывается в clickAddTask() и затем выполняется. При повторном использовании функции в selectTask() команды не помещаются в очередь, используется экземпляр, созданный в clickAddTask(), и поэтому некоторые элементы не могут быть найдены с тех пор, как DOM изменился с тех пор.
Теперь первый вопрос: правильная ли моя теория? Второй вопрос: как я могу это исправить?
Заранее благодарен! Cheers
Возможно, вам недостает кода в верхней части вашего первого фрагмента кода. – unpollo
Это фрагмент. Недопустимая часть - это начало конструктора со всеми требованиями и полями. – Homewrecker
Я надеюсь, что вы выписали этот фрагмент и не скопировали его/вставляли, потому что вы неправильно произнесли servicePage при вызове функции selectTask() – TesterPhi