无头铬+ rspec无法选择选项表单选择列表它给出错误capybara元素未找到

时间:2018-05-18 08:47:58

标签: google-chrome rspec capybara

我正在使用无头铬 rspec - 3.6.0 capybara - 2.15.1

select('apple',from: 'fruits', visible: false)
page.find('#apple', visible: false).click
within 'results' do
  page.find('.option', text: 'apple').click
end

错误:

 Capybara::ElementNotFound: Unable to find visible css "#fruits .chosen-drop .chosen-results"

1 个答案:

答案 0 :(得分:0)

您的问题中显示的错误并非来自您显示的任何其他代码行,但根据错误消息,很明显发生了什么。

尝试对使用visible: false找到的元素执行任何操作都没有意义,因为用户无法与不可见元素进行交互(如果指定visible: false,则有99%的时间你做错了什么)。在目前的情况下,您使用的是chosen库,该库隐藏了普通的HTML< select>元素并将其替换为由< ul>组成的JS驱动的小部件。和< li>元素。因此,您不能使用普通的select方法,而是需要像普通用户那样与页面进行交互(单击“选择”字段,然后单击列表中的元素)。您尚未提供为您的网页生成的实际HTML,但根据您的尝试以及chosen演示页面生成的输出 - https://harvesthq.github.io/chosen/ - 它将类似于

<select id="fruits" ... style="display: none;>
  ...
</select>
<div class="chosen-container" ... >
  ...
  <div class="chosen-drop">
    ...
    <ul class="chosen-results">
      <li ...>Apple</li>
      <li ...>Orange</li>
      ...
    </ul>
  </div>
</div>

因此,要使用该功能,用户首先需要点击.chosen-conatiner元素(隐藏选择的兄弟)才能打开.chosen-drop元素,然后点击正确的&lt; li&gt;从.chosen-results元素转换为类似

的元素
chosen_container = find('select#fruits + .chosen-container').click
chosen_container.find('.chosen-results li', exact_text: 'Apple').click

如果这对您不起作用,那么您需要将实际页面中的确切HTML添加到您的问题中。

注意:如果您在网站中处理了大量chosen小部件,您可能需要考虑编写自定义的Capybara选择器 - https://www.rubydoc.info/github/teamcapybara/capybara/Capybara#add_selector-class_method - 以使测试更好地阅读