我的页面上有以下代码:
<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。
答案 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。