如果元素在量角器中不可见,则继续

时间:2016-03-24 13:17:05

标签: protractor

我想检查某个元素是否可见,如果不可见,我希望我的测试继续使用其他内容。

问题是,如果元素不可见,似乎没有任何工作......我已经尝试isDisplayed()isPresent()invisibilityOf() ...但是测试如果元素不可见则失败。 例如

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

如果myElement存在,这样可以正常工作。但如果没有,测试失败并显示错误:找不到使用定位器的元素:By.cssSelector(myCss)。所以它不会解决isDisplayed()返回的承诺,因此它永远不会转到其他部分。 如果未显示元素,我该怎么做才能让我的测试继续运行?

3 个答案:

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