使用自举菜单在水豚中注销

问题描述 投票:0回答:1

我在水豚上的引导程序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'

与以前几乎相同。我缺少可见性属性,该错误只是误导。但是太多的硬编码...

javascript ruby-on-rails selenium bootstrap-4 capybara
1个回答
0
投票

抱歉,我无法发表评论以致澄清,因此我必须将其发布为答案。

我将在这里进一步研究的三件事:

  1. find('#userDropdown').click工作吗?如果是这样,请尝试这样做,因为从用户的角度来看这更自然,并且可能导致更准确的“失败”。
  2. 由于测试浏览器中的窗口大小,整个导航是否被隐藏?
  3. 这不是最佳做法,但完全不用触摸下拉菜单,您可以执行find(:xpath, "//a[text()='logout']", visible: false).click吗?您甚至可以临时添加一个CSS ID并使用它,而不是在xpath中使用它。

[我希望在这三个问题中,第三个问题最有可能起作用,但也最不可能确定问题,而不是好的做法。希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.