Невозможно использовать by.repeater() для элемента ng-repeat через Protractor

У меня есть следующий код Angular HTML, и я пытаюсь выполнить сквозной тест с помощью транспортира для нажатия раскрывающегося списка.

Вот html:

<ul class="dropdown-menu">
   <li ng-repeat="currency in availableCurrencies">
      <a href="#" class="ng-binding">USD</a>
   </li>
   <li ng-repeat="currency in availableCurrencies">
      <a href="#" class="ng-binding">EUR</a>
   </li>
   <li ng-repeat="currency in availableCurrencies">
      <a href="#" class="ng-binding">GBP</a>
   </li>
 </ul>

Вот код транспортира/js, который должен щелкнуть EUR:

it('Change Currency to EUR',function(){
var curr_EUR = element.all(by.repeater('currency in availableCurrencies').row(1));    
curr_EUR.click();
/*curr_EUR.element(by.linkText('EUR')).click();*/
});

Возникли проблемы с нажатием на элемент, ошибка, которую я получаю:

ElementNotVisibleError: элемент не виден.

Может ли кто-нибудь указать, где я ошибаюсь?


person patz    schedule 26.03.2015    source источник


Ответы (3)


Обычно это означает, что элемент не виден.

Что я предлагаю вам сделать, так это попробовать что-то в качестве обычного пользователя. Я подозреваю, что если вы будете следовать шагам, указанным в вашем коде транспортира, точно, когда вы хотите щелкнуть EUR, он будет невидим.

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

Таким образом, ваш код выглядит как раскрывающееся меню, вам, вероятно, придется (в вашем коде транспортира) щелкнуть раскрывающееся меню, прежде чем EUR станет видимым.

person emory    schedule 26.03.2015

Две вещи, которые нужно сделать:

  • сначала вам нужно открыть раскрывающийся список
  • затем вам нужно щелкнуть элемент a внутри li

Код (думаю, можно вообще не использовать локатор by.repeater()):

var dropdown = element(by.css('ul.dropdown-menu'));
dropdown.click();

dropdown.element(by.linkText('EUR')).click();
person alecxe    schedule 26.03.2015

Попробуйте с этим, должно получиться. Я буду работать для всех комбинаций

`for(i=0; i<4; i++) {
        element(by.className("dropdown-menu").click();
        element.all(by.repeater('currency in availableCurrencies').row(i)).click();
    }`
person Walter Fernandes    schedule 26.02.2018
comment
Привет, вы должны добавить некоторые пояснения к вашему коду; прочитайте это: stackoverflow.com/help/how-to-answer - person nicolallias; 26.02.2018