2016-03-24 62 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) {}; 
相关问题