什么时候应该在ExpectedConditions.presenceOf(element)上使用element.isPresent()?

时间:2019-03-07 17:46:37

标签: protractor

在端到端测试我们的应用程序时,我经常在等待状态转换(关闭模式,出现按钮等)。盲目的实验使我有时使用browser.wait(ExpectedConditions.presenceOf(someElement),而其他时候则使用browser.wait(someElement.isPresent())

对我来说,名称暗示它们是可互换的。但事实并非如此。在使用这些情况时,是否有什么可以帮助我确定何时使用的情况?

2 个答案:

答案 0 :(得分:1)

根据我的经验,当我不想专门验证某些内容时,我曾使用element.isPresent()。例如,我可以写:

element.isPresent().then(function(elm){
    if(elm) { //if the element is present, do something  }
    else    { //if the element is not present, do something else  }
});

但是,如果我需要一些元素存在/可见/可点击以便执行期望或其他事情,那么我会使用browser.wait(EC.presenceOf/visibilityOf/elementToBeClickable(element))

这还取决于您需要等待的元素。如果需要单击它的按钮,则必须使用elementToBeClickable

答案 1 :(得分:0)

如果我们看一下代码,就会发现isPresent方法看起来像这样

  isPresent(): wdpromise.Promise<boolean> {
    return this.count().then((count) => {
      return count > 0;
    });
  }

presenceOf依赖于isPresent

 presenceOf(elementFinder: ElementFinder): Function {
    return elementFinder.isPresent.bind(elementFinder);
  };

事实上,他们在做同样的事情。但是请注意,ExpectedConditions运算符,例如notor等,期望ExpectedConditions作为自变量presenceOf,而isPresent不是自变量。 / p>

有时候,您需要比检查一个特定元素browser.wait(someElement.isPresent())更复杂的条件。这是ExpectedConditions构造非常有用的地方,也是您需要presenceOf的地方。