我正在使用无头铬, 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"
答案 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 - 以使测试更好地阅读