#protractor
#транспортир
Вопрос:
У меня есть выпадающее меню на моей странице. Моя цель для тестирования protractor — щелкнуть один из параметров этого выпадающего меню и попросить protractor проверить результаты:
<ul class="dropdown">
<li class="nav-header">portfolio</li>
<li class="divider"></li>
<li class="dropdown-submenu"> ... </li>
<li ng-repeat="p in user.portfolios">
<!-- this is the option we will click for our testing -->
<a href ng-click="displayPortfolio(p)>Portfolio 1 </a>
</li>
<li ng-repeat="p in user.portfolios">
<a href ng-click="displayPortfolio(p)>Portfolio 2 </a>
</li>
<li ng-repeat="p in user.portfolios">
<a href ng-click="displayPortfolio(p)>Portfolio 3 </a>
</li>
</ul>
мой тест транспортира выглядит примерно так:
it('should display relevant portfolio when clicked',function(){
ptor.ignoreSynchronization = true;
element.all(by.xpath("//a[@ng-click='displayPortfolio(p)'])).then(function(list){
list[0].click();
expect(... some assertion here);
});
ptor.ignoreSynchronization = false;
}
На всякий случай, если вам интересно, ptor.ignoreSynchronization включена, потому что моя веб-страница постоянно опрашивает серверную часть на предмет некоторых обновлений.
Транспортир выдает следующую ошибку при запуске теста:
ElementNotVisisbleError: element not visible
Я не совсем понимаю, о чем эта ошибка. Элемент, безусловно, виден, поскольку, когда я просматриваю исходный код страницы, я вижу его в структуре DOM.
Любезный совет
Ответ №1:
Я обработал тот же случай, установив значение напрямую. найдите элемент и задайте значение с помощью «SendKeys».
Попробуйте то же самое для вашего сценария.
Ответ №2:
Вы пробовали использовать repeater locator?
it('should display relevant portfolio when clicked',function(){
var elements = element.all(by.repeater('p in user.portfolios'));
elements.get(0).click().then(function(){
expect(... some assertion here);
});
}