【问题标题】:Continue if element is not visible in protractor如果元素在量角器中不可见,则继续
【发布时间】:2017-04-22 02:33:10
【问题描述】:

我想检查一个元素是否可见,如果不可见,我希望我的测试继续进行其他操作。

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

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

如果 myElement 存在,这工作得很好。但如果不是,测试失败并出现错误:使用定位器找不到元素:By.cssSelector(myCss)。所以不知何故它不能解决isDisplayed() 返回的承诺,所以它永远不会进入其他部分。 如果未显示元素,我该怎么做才能保持测试运行?

【问题讨论】:

  • 我也有同样的情况。对于上述问题,我们有正确的解决方案吗?

标签: protractor


【解决方案1】:

您可以链接承诺来解决此问题。仅当元素同时存在并显示时,此函数才会返回 true。

var isApproachable = function(element) {
  return element.isPresent().then(function(present) {
    return present
      ? element.isDisplayed()
      : false;
  });
}

isApproachable(myElement).then(function(approachable) {
  if (approachable) ...
});

【讨论】:

  • 谢谢!但不幸的是,这并不能解决我的问题。我需要的是这样的: if (myElement is display) { //do something} else {do something else}。如果元素存在,这适用于 isDisplayed(),但如果我的元素不存在,它将永远不会进入 else 部分,它总是失败......
  • 对不起我的错误。您仍然可以在已解决的承诺中访问布尔值:isApproachable(myElement).then(function(approachable) { blabla });
【解决方案2】:

为了澄清,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...');
            }
        });
    });
});

【讨论】:

    【解决方案3】:

    您可以在空函数中捕获错误。然而,如果除了“No element found using locator: By.cssSelector(myCss)”错误之外发生其他错误,例如“Stale element”,这将是危险的。

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

    【讨论】:

      猜你喜欢
      • 2019-12-28
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2019-02-13
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多