Тесты AngularJS e2e с Protractor: невозможно протестировать элементы, вставленные с помощью ng-include

я тестирую приложение AngularJS с Protractor. Но у меня возникли проблемы с тестированием кода, вставленного с помощью ng-include.

Я получаю эту ошибку «Ошибка: элемент не найден с использованием локатора: By.id», когда я пытаюсь найти элемент, который был вставлен с помощью ng-include.

Если я запускаю транспортир в режиме отладки и проверяю страницу после завершения ng-include, я нахожу это в html «‹--ng-include-->» вместо элемента, который должен был быть там.

Я использовал Karma для проведения тестов, но не мог проверить, есть ли там элементы. Затем я прочитал некоторую документацию, и в ней говорилось, что Protractor больше подходит для этого, но, похоже, у меня та же проблема.

app.js

 $scope.setNewWindow = function () { 
       var elem = $compile('<div ng-controller="myCtrl" class="windows-frame" id="window' + windowID + '">' +
                           '<div ng-include src="\'includes/elemToInclude.html\'"></div>' +
'</div>')($scope);

$("#main").append(elem);}

test.js

it('test', function() {

    browser.executeScript("var scope = angular.element( document.querySelectorAll('#main')[0] ).scope();" +
        "scope.setNewWindow()");

    element(by.id('include_element_id')).click();
});

person KatT    schedule 04.09.2014    source источник


Ответы (1)


Вы не должны использовать browser.executeScript, это не сделано транспортиром, поэтому не синхронизировано с Angular.

Вы бы предпочли использовать встроенные методы Protractor, чтобы сделать элемент видимым. Делайте то же, что и ваши пользователи на вашем веб-сайте, например, нажмите ссылку или кнопку.

Кстати, вы должны добавить элемент с jQuery просто так, сделайте это в директиве, чтобы избежать проблем с синхронизацией.

person Adlen Afane    schedule 06.10.2014
comment
Я использую browser.executeScript, потому что я не могу имитировать щелчок, который вызывает $scope.setNewWindow(), это связано с плагином, который я использую. Но когда у меня будет время, я попытаюсь изменить это на директиву. танки. - person KatT; 07.10.2014