Protractor 如果元素在量角器中不可见,则继续
我想检查一个元素是否可见,如果不可见,我想让我的测试继续进行其他测试 问题是,如果元素不可见,则似乎什么都不起作用。。。我已经尝试了Protractor 如果元素在量角器中不可见,则继续,protractor,Protractor,我想检查一个元素是否可见,如果不可见,我想让我的测试继续进行其他测试 问题是,如果元素不可见,则似乎什么都不起作用。。。我已经尝试了isDisplayed(),isPresent(),不可见性()。。。但若元素不可见,测试就会失败。 例如 如果myElement存在,则此操作非常有效。但如果没有,测试将失败,并出现错误:使用locator:By.cssSelector(myCss)找不到元素。因此,它无法解析isDisplayed()返回的承诺,因此它永远不会转到else部分。 如果未显示元素,
isDisplayed()
,isPresent()
,不可见性()。。。但若元素不可见,测试就会失败。
例如
如果myElement存在,则此操作非常有效。但如果没有,测试将失败,并出现错误:使用locator:By.cssSelector(myCss)
找不到元素。因此,它无法解析isDisplayed()
返回的承诺,因此它永远不会转到else部分。
如果未显示元素,我可以做什么来保持测试运行?您可以解决此问题。仅当元素同时存在并显示时,此函数才会返回true
var isApproachable = function(element) {
return element.isPresent().then(function(present) {
return present
? element.isDisplayed()
: false;
});
}
isApproachable(myElement).then(function(approachable) {
if (approachable) ...
});
为了澄清,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...');
}
});
});
});
您可以在空函数中捕获错误。但是,如果在“使用定位器未找到元素:By.cssSelector(myCss)”错误之外发生其他错误,例如“Stale element”,则这是非常危险的
谢谢但不幸的是,这并不能解决我的问题。我需要的是这样的东西:如果(myElement被显示){//do something}else{do something}。如果元素存在,这对isDisplayed()很好,但如果我的元素不存在,它将永远不会转到else部分,它总是失败…对不起,我的错误。您仍然可以访问解析承诺中的布尔值:isapproach(myElement).then(function(approach){blablabla});我也有同样的情况。对于上述问题,我们有什么正确的解决办法吗?
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...');
}
});
});
});
element(myElement).isDisplayed().then(function(result) {
if (result) {
//do something
}
else {
//do something else
}
}.thenCatch(function(err) {};