Rspec 水豚罐头';无法按id查找元素

Rspec 水豚罐头';无法按id查找元素,rspec,capybara,Rspec,Capybara,我的页面上有以下代码: <div class="row column filter-tab"> <div id="filter-button" class="button"><%= fa_icon 'filter' %></div> </div> 我收到了可怕的消息 Capybara::ElementNotFound: Unable to find css "#filter-button" 如果我在测试中放置断点,我可以

我的页面上有以下代码:

<div class="row column filter-tab">
  <div id="filter-button" class="button"><%= fa_icon 'filter' %></div>
</div>
我收到了可怕的消息

 Capybara::ElementNotFound:
   Unable to find css "#filter-button"
如果我在测试中放置断点,我可以检查HTML并查看元素是否存在,并且我能够与它交互

(byebug) page.has_css?('#filter-button', visible: false)
    false
以及

$('#filter-button')
Object { length: 1, context: HTMLDocument → moves, selector: "#filter-button", 1 more… }

我开始没有主意了。我能想到的唯一一件事是,这个按钮位于一个容器中,在页面加载后通过javascript定位(只需增加CSS的顶部值)——但即使如此,我认为它仍然可以通过visible:false/visible:all在页面上找到。

如果为了找到元素而必须将“visible:false”传递给任何一个Capybara方法,那么该元素在页面上实际上是不可见的。如果它在页面上实际上不可见,那么用户将无法单击该元素,因此单击将失败。您的
page.has_css?(“#filter button”,visible:false)
返回
false
,但这意味着按钮根本不在当前页面上(无论是否可见),因此请检查id的拼写,和/或通过
page.html
检查页面的实际html

检查您的
单击是否不在另一个
块中,如:

within "#some_other_element" do
  #lots of other checks...
  page.find('#filter-button').click
end

我以前经常陷入这个陷阱,特别是在附加到文档正文的模态中(在原始选择器之外)。

是您的
页面。查找(“#过滤器按钮”)。在
块内的
中单击
page.has_css?(“#筛选按钮”)
是否返回true?是的,它在一个块中,你是天才,我只是个白痴。你能给我一个答案而不是评论,这样我就可以选择它了吗?我只传递visible false来说明这不是一个解决方案-我浏览了所有其他so帖子,这似乎是大多数人的问题-尽管像我说的,我可以在页面上看到元素,并在断点处与它交互。我也可以使用相同的选择器通过jquery选择该项,因此它不是html或拼写。当您在函数中时,特别狡猾,再次感谢!
within "#some_other_element" do
  #lots of other checks...
  page.find('#filter-button').click
end