Выйти из капибары с меню bootstrap - PullRequest
0 голосов
/ 08 апреля 2020

У меня проблемы с тестированием меню в 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'

Почти такой же, как и раньше. Мне не хватало атрибута видимости, а ошибка просто вводила в заблуждение. Но слишком много запрограммировано ...

1 Ответ

0 голосов
/ 09 апреля 2020

Извиняюсь, потому что я не могу комментировать, чтобы получить ясность, поэтому я должен опубликовать это как ответ.

Три вещи, которые я бы рассмотрел здесь:

  1. find('#userDropdown').click работа? Если это так, попробуйте сделать это, поскольку это более естественно с точки зрения пользователя и может привести к более точному «отказу».
  2. Скрыта ли вся навигация из-за размера окна в тестовом браузере?
  3. Не то, чтобы это была лучшая практика, но не касаясь выпадающего меню, можете ли вы сделать find(:xpath, "//a[text()='logout']", visible: false).click? Вы могли бы даже временно добавить CSS идентификатор и использовать его вместо фафа с xpath.

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

...