2011-10-29 61 views
12

我在视图模板测试重点与水豚

<%= link_to_function "add new category", "$('#category_name').focus()" %> 

有一个简单的link_to_function,我想用豚要求的规格来进行测试。基本规格应该是这个样子

it "focuses category form when I click 'add new category'" do 
    visit new_article_path 
    click_link "add new category" 

    # unfortunately there's nothing like 'has_focus?' 
    find_field("category_name").should have_focus 
end 

的问题是,我无法找到任何东西,这将检查元素具有焦点。 我发现的唯一的事情是这样的

page.evaluate_script('document.focus')[:id] 

然而,这不是由capybara-wekbit司机,我使用,以避免每次测试运行开浏览器,支持。

回答

21

我只是用下面的代码(与phantomjs司机,但我相信,它与WebKit的作品也):

page.evaluate_script("document.activeElement.id") == "some_id" 

附:一年的问题没有答案。他们应该给我一个徽章吗? :)

+1

非常有帮助的;你当然应该得到一个徽章。谢谢。 –

+1

如果实际的'activeElement'实际上被异步插入到dom中,则此方法将不起作用,因为它不一定已经在dom中(因此可以被聚焦)。因此,另一个检查元素是否已经被添加了。 – ohcibi

4

您应该使用:focus选择,e.g:

page.should have_selector('#category_name:focus') 
+4

CSS会暗示这一点,但似乎Capybara/Poltergeist不能正确处理:焦点选择器。即使在document.activeElement告诉我它具有正确的HTMLInputElement焦点时,我总是会得到':focus'的空结果。 –