我想检查某个元素是否可见,如果不可见,我希望我的测试继续使用其他内容。
问题是,如果元素不可见,似乎没有任何工作......我已经尝试isDisplayed()
,isPresent()
,invisibilityOf()
...但是测试如果元素不可见则失败。
例如
element(myElement).isDisplayed().then(function(result) {
if (result) {
//do something
}
else {
//do something else
}
}
如果myElement存在,这样可以正常工作。但如果没有,测试失败并显示错误:找不到使用定位器的元素:By.cssSelector(myCss)
。所以它不会解决isDisplayed()
返回的承诺,因此它永远不会转到其他部分。
如果未显示元素,我该怎么做才能让我的测试继续运行?
答案 0 :(得分:2)
您可以链接承诺来解决此问题。只有当元素存在并显示时,此函数才会返回true。
application/x-www-form-urlencoded
答案 1 :(得分: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...');
}
});
});
});
答案 2 :(得分:0)
您可以将错误捕获到空函数中。然而,如果除了使用定位器找到的" No元素之外发生不同的错误,则这是危险的:By.cssSelector(myCss)"你得到的错误,例如"陈旧元素"。
element(myElement).isDisplayed().then(function(result) {
if (result) {
//do something
}
else {
//do something else
}
}.thenCatch(function(err) {};