У меня проблемы с тестированием меню в bootstrap 4 поверх капибары.
Фрагмент меню навигации выглядит следующим образом:
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item dropdown" >
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" id="userDropdown">
User
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">
<%= link_to 'logout', logout_url, method: :post, class: 'dropdown-item'%>
</div>
</li>
</ul>
</div>
В режиме отладки это почти работает:
find('#userDropdown').execute_script('$(this).dropdown("toggle")')
click_on 'logout'
«Почти», потому что в byebug браузер всегда выглядит на один шаг позади. Запуск любого действия, например, выбор чего-то, чего не существует, перемещает его вперед в ожидаемое состояние.
Оттуда эти действия работают.
Но в тесте я получаю Selenium::WebDriver::Error::StaleElementReferenceError: stale element reference: element is not attached to the page document
в строке click_on 'logout'
.
Обходной путь (работает сейчас):
find('#userDropdown', visible: false).execute_script('$(this).dropdown("toggle")')
click_on 'logout'
Почти такой же, как и раньше. Мне не хватало атрибута видимости, а ошибка просто вводила в заблуждение. Но слишком много запрограммировано ...