2015-01-09 42 views
6

這是微不足道的測試,如果一個元素點擊量角器,但我卡住撓我的頭試圖弄清楚如何檢查一個元素是否而不是可點擊。如何使用量角器檢查元素是否無法點擊?

我試圖在try/catch中包裝點擊函數,以便當嘗試點擊它時引發錯誤應該抓住它並讓測試通過;但是,這不起作用。

這裏是我的,做檢查的方法代碼:

return this.shouldSeeDisabledFunds() 
    .then(function() { 
     var clickable = true; 

     try { 
      fundsElem.first().click(); 
     } catch (e) { 
      clickable = false; 
      console.log(clickable); 
     } finally { 
      console.log(clickable); 
     } 

     console.log(clickable); 

     // All the way through, clickable is still true, and the console log in the 
     // catch is not called. I believe this is because click is asynchronous. 
    }) 
; 
+1

'click()'不返回承諾嗎? –

+0

是的,它的確如此。在意識到這一點之後,我現在已經明白了。我會發佈一個覆蓋它的答案。 – Seer

回答

8

我發現這個有效的解決方案。由於click()返回一個承諾,您可以簡單地將其.then關閉,並拋出成功的點擊處理程序並重寫catch處理程序,以便在測試通過時不做任何事情,從而在元素不可點擊時通過測試。

return this.shouldSeeDisabledFunds() 
    .then(function() { 
     fundsElem.first().click() 
      .then(
       function() { 
        throw "Can click Funds element that should be disabled"; 
       }, 
       function() {} 
      ) 
     ; 
    }) 
; 
+0

應該指出的是,這個解決方案有實際點擊元素的副作用。如果有一種解決方案可以返回信息而沒有副作用,那將會很好。 –

1

也許不是適合你的情況,但更好的方法來檢查,如果一個元素是可以點擊的檢查,如果它是可見和啓用:elem.isDisplayed()elem.isEnabled()。這樣,你不會無意中點擊按鈕。

據透露,將有來幫助像這樣的情況下,庫:https://github.com/angular/protractor/pull/1703

+3

還有其他一些可能會導致elemnent不可點擊的情況,例如,如果在其上打開模式對話框,則即使該元素可見並啓用,也不會被點擊。 –

+0

也是指針事件:無; willl使元素不可點擊(量角器異常),但elem.isEnabled()將返回true – Olivvv

-1

要驗證可點擊:element.isDisplayed()TOBE(真)

不可點擊:元素。 isDisplayed()。toBe(false)

爲我工作。

+0

可以顯示一個元素,但會覆蓋另一個可接受點擊的半透明元素。 – trevorade

相關問題