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) {};