Capybara无法通过id找到元素

时间:2017-05-01 06:12:57

标签: rspec capybara

我的页面上有以下代码:

<div class="row column filter-tab">
  <div id="filter-button" class="button"><%= fa_icon 'filter' %></div>
</div>

我有一个尝试做的rspec测试

page.find('#filter-button').click

我收到了可怕的

 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值) - 但即便如此,我认为它仍然可以在页面然后显示:false / visible:all。

2 个答案:

答案 0 :(得分:1)

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

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

我之前陷入了很多陷阱,特别是在附加到文档正文的模态中(在原始选择器之外)。

答案 1 :(得分:0)

如果你必须通过&#39; visible:false&#39;为了找到元素,任何Capybara方法,然后该元素实际上在页面上不可见。如果它在页面上实际上不可见,则用户将无法点击该元素,因此点击将失败。您的page.has_css?('#filter-button', visible: false)示例返回false这一事实意味着该按钮根本不在当前页面上(可见或不可见),因此请检查ID的拼写,和/或检查通过page.html页面的实际html。