2013-07-17 44 views
3

我有一個angular.js應用程序,它應該在執行某些操作時將焦點設置爲特定的元素(例如,將焦點設置爲無效的表單字段以讓用戶糾正錯誤)。角度e2e測試:如何檢查某個元素是否獲得了焦點?

我想要的角度,E2E測試中測試這種行爲:

it('should set the focus to the invalid field', function() { 
    input('email').enter('foo'); // this is not a valid email address 
    element(/* submit button */).click(); // try to submit the form 

    // How do I do this? 
    expect(element(/* email input element */)).toHaveTheFocus(); 
}); 

我怎麼能指望某個元素(不)具有焦點?我已經嘗試過了 ':聚焦' 選擇

expect(element('input[id="..."]:focus').count()).toBe(1); 

,但沒有成功(由Testing whether certain elements are visible or not啓發)。

要將焦點設置,我用的How to set focus on input field?

我還編寫單元測試這一想法,並最終使用在DOM焦點()函數間諜(這是,據我所知, e2e測試不可能/不可能)。

+0

我想測試時,同樣的問題把重點放在輸入上。嘗試在DOM中插入測試元素(但它沒有幫助我)。 –

+0

我正在使用一個指令,在設置焦點時向DOM添加工具提示。所以我可以通過檢查工具提示是否正確來檢查焦點是否正確。 ()()()()()(){}()但至少工作 –

+0

這看起來很有前景:http://stackoverflow.com/questions/5318415/which-browsers-support-document-activeelement也許有一種方法來添加一個新的匹配器,它使用一個元素和document.activeElement。 –

回答

0

我在這裏看到兩個選項。第一個,我真的推薦,特別是在E2E測試中,是使用Jasmine-jQuery,它提供了toBeFocused匹配器來處理這個問題。

如果你不想有茉莉花,jQuery的,因爲它太大,或者因爲你不喜歡它,那麼你有兩種選擇:

  • 比較文檔的有源元件的按鈕就可以了,訪問它:document.activeElement
  • 從元素本身得到它比較文檔的有源元件的按鈕(這是方法茉莉花jQuery不會吧)有:DOMELEMENT.ownerDocument.activeElement