2016-03-24 59 views
2

我想檢查元素是否可見,如果不是,我希望我的測試繼續執行其他操作。如果元素在量角器中不可見,則繼續

問題是,如果元素不可見,似乎沒有任何工作...我已經嘗試isDisplayed(),isPresent(), invisibilityOf() ...但如果元素不可見,測試將失敗。例如,

element(myElement).isDisplayed().then(function(result) { 
     if (result) { 
     //do something 
     } 
    else { 
    //do something else 
    } 
    } 

這工作得很好,如果myElement存在。但是,如果沒有,測試將失敗,並顯示錯誤:使用定位器找不到任何元素:By.cssSelector(myCss)。所以它不能解決由isDisplayed()返回的承諾,所以它永遠不會去其他部分。 如果元素不顯示,我可以做些什麼來保持測試運行?

回答

2

您可以鏈接承諾來解決此問題。僅當元素都存在並顯示時,此函數纔會返回true。

var isApproachable = function(element) { 
    return element.isPresent().then(function(present) { 
    return present 
     ? element.isDisplayed() 
     : false; 
    }); 
} 

isApproachable(myElement).then(function(approachable) { 
    if (approachable) ... 
}); 
+0

謝謝!但不幸的是,這並不能解決我的問題。我需要的是這樣的:if(myElement顯示){//做些事情} else {做其他事情}。這與isDisplayed()如果元素是存在,但如果我的元素不存在,它將永遠不會去其他部分,它總是失敗... –

+0

對不起我的錯誤。您仍然可以在已解決的承諾中訪問布爾值:isApproachable(myElement).then(function(approachable){ blabla }); – Segg3r

1

爲了澄清,isDisplayed需要實際在瀏覽器中呈現的元素。 isPresent表示該元素在dom(和/或可見)中列出。

isDisplayed如果元素不存在,將失敗,因此您不能使用它來測試是否存在。您需要使用isPresent

可正是如此測試:

describe('isPresent', function() { 
    it('should not fail if element does not exist', function() { 
     browser.get('http://google.com'); 
     // this will fail if you use isDisplayed 
     $('#doesNotExist').isPresent().then(function(inDom) { 
      if(inDom) { 
       console.log('I EXIST!!!!1!'); 
      } else { 
       console.log('NOT HERE...'); 
      } 
     }); 
    }); 
}); 
0

你可以捕獲錯誤的一個空函數。如果除了「使用locator找到的沒有元素:By.cssSelector(myCss)」錯誤(例如「Stale元素」)之外發生了其他錯誤,這是非常危險的。

element(myElement).isDisplayed().then(function(result) { 
    if (result) { 
    //do something 
    } 
    else { 
    //do something else 
    } 
}.thenCatch(function(err) {}; 
相關問題