2016-02-10 3 views
1

Я думаю, что знаю теорию решения, но у меня возникают проблемы с ее внедрением. Рассмотрим следующий фрагмент кода:Повторное использование функций

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

+0

Возможно, вам недостает кода в верхней части вашего первого фрагмента кода. – unpollo

+0

Это фрагмент. Недопустимая часть - это начало конструктора со всеми требованиями и полями. – Homewrecker

+0

Я надеюсь, что вы выписали этот фрагмент и не скопировали его/вставляли, потому что вы неправильно произнесли servicePage при вызове функции selectTask() – TesterPhi

ответ

0

Я немного отредактировал его, и он работает сейчас. Проблема была в самом тесте, а не в повторном использовании функций.