2011-10-29 200 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'的空結果。 –