水豚无法通过 id 找到元素
Capybara can't find element by id
我的页面上有以下代码:
<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.
如果您必须将 'visible: false' 传递给任何 Capybara 方法才能找到该元素,那么该元素在页面上实际上是不可见的。如果它在页面上实际上不可见,那么用户将无法单击该元素,因此单击将失败。事实上,您的 page.has_css?('#filter-button', visible: false)
returns false
示例虽然暗示该按钮根本不在当前页面上(可见或不可见),因此请检查 id 的拼写,and/or 通过 page.html
检查页面的实际 html。
检查您的 click
是否在另一个 within
块内,例如:
within "#some_other_element" do
#lots of other checks...
page.find('#filter-button').click
end
我以前多次掉入这个陷阱,尤其是在附加到文档正文的模式中(在原始选择器之外)。
我的页面上有以下代码:
<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.
如果您必须将 'visible: false' 传递给任何 Capybara 方法才能找到该元素,那么该元素在页面上实际上是不可见的。如果它在页面上实际上不可见,那么用户将无法单击该元素,因此单击将失败。事实上,您的 page.has_css?('#filter-button', visible: false)
returns false
示例虽然暗示该按钮根本不在当前页面上(可见或不可见),因此请检查 id 的拼写,and/or 通过 page.html
检查页面的实际 html。
检查您的 click
是否在另一个 within
块内,例如:
within "#some_other_element" do
#lots of other checks...
page.find('#filter-button').click
end
我以前多次掉入这个陷阱,尤其是在附加到文档正文的模式中(在原始选择器之外)。