Я запускаю E2E в своем угловом приложении с помощью Protractor. Я сталкиваюсь с очень странной проблемой. Я использую Dropstrap Dropdown, у которого есть некоторые опции. Мне нужно нажать на один из вариантов. Я ссылался на этот ответ, который пытается сделать что-то подобное, но не работает для меня: Транспортир - как выбрать сильно вложенный элемент выпадающего списка?
Моя структура выглядит так:
<div id="fc-more-btn" class="btn-group btn-group-sm dropdown" role="group" dropdown="" is-open="ctrl.fcDropdown">
<button type="button" class="btn btn-default dropdown-toggle filetree-btn" tooltip="More Actions" tooltip-trigger="mouseenter" tooltip-placement="bottom" ng-disabled="ctrl.sd.noSelections" dropdown-toggle="" aria-haspopup="true" aria-expanded="false">
<span class="fa fa-caret-down"></span>
</button>
<ul class="dropdown-menu filetree-dropdown" role="menu">
<li>
<a class="btn fc-dropdown-link" ng-disabled="ctrl.sd.noSelections||(ctrl.sd.multipleSelections||!ctrl.sd.dirSelected)" ng-click="ctrl.createNewFile()">
New File
</a>
</li>
<li>
<a class="btn fc-dropdown-link" ng-disabled="ctrl.sd.noSelections||(ctrl.sd.multipleSelections||!ctrl.sd.dirSelected)" ng-click="ctrl.createNewDir()">
New Folder
</a>
</li>
<li>
<a class="btn fc-dropdown-link" ng-disabled="ctrl.sd.noSelections" ng-click="ctrl.copyFiles()">
Copy
</a>
</li>
<li>
<a class="btn fc-dropdown-link" ng-disabled="ctrl.clipboardEmpty||ctrl.sd.noSelections||(ctrl.sd.multipleSelections||!ctrl.sd.dirSelected)" ng-click="ctrl.pasteFiles()" disabled="disabled">
Paste
</a>
</li>
<li>
<a class="btn fc-dropdown-link" ng-disabled="ctrl.sd.noSelections||ctrl.sd.multipleSelections" ng-click="ctrl.renameFile()">
Rename
</a>
</li>
</ul>
</div>
В моем тесте я пытаюсь щелкнуть ссылку Переименовать.
Код, который я написал, это:
element(by.css('.dropdown-toggle')).click().then(function(){
//click on rename
});
При запуске теста на переключателе выпадающего изображения появляется небольшое мерцание, и кажется, что нажата кнопка. Однако выпадающее меню, которое должно отображаться, не отображается.
В результате я не смогу имитировать щелчок, чтобы переименовать. Я делаю что-то неправильно?
Попробуйте выбрать cssContainingText, очень полезно при выпадающих меню и вложенных элементах!
element(by.cssContainingText('option', 'Rename')).click();