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

Protractor 什么时候应该在ExpectedConditions.presenceOf(元素)上使用element.isPresent()?,protractor,Protractor,在端到端测试我们的应用程序时,我经常在等待状态转换(模式关闭、按钮出现等)。盲目实验导致我有时使用browser.wait(预期条件.presenceOf(someElement),有时使用browser.wait(someElement.isPresent()) 对我来说,这些名称意味着它们可以互换。但事实并非如此。我使用这些名称的情况是否有助于我判断何时使用哪种名称?根据我的经验,我使用了element.isPresent()来表示我不想具体验证某些内容的情况。例如,我可以编写: eleme

在端到端测试我们的应用程序时,我经常在等待状态转换(模式关闭、按钮出现等)。盲目实验导致我有时使用
browser.wait(预期条件.presenceOf(someElement)
,有时使用
browser.wait(someElement.isPresent())


对我来说,这些名称意味着它们可以互换。但事实并非如此。我使用这些名称的情况是否有助于我判断何时使用哪种名称?

根据我的经验,我使用了
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  }
});
但是,如果我需要某个元素存在/可见/可点击,以便执行expect或其他内容,那么我将使用
浏览器。等待(EC.presenceOf/visibilityOf/element tobelickable(element))


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

如果我们查看代码,我们将看到该方法如下所示

  isPresent(): wdpromise.Promise<boolean> {
    return this.count().then((count) => {
      return count > 0;
    });
  }
事实上,它们的作用是相同的。但请注意,ExpectedConditions运算符,如
not
等。expecting
ExpectedConditions
用作参数,而
isPresent
不是


有时您需要更复杂的条件,而不是检查某个特定元素是否存在
browser.wait(someElement.isPresent())
。这就是
预期条件
构造非常有用的地方,这就是你需要
呈现的地方

已经有了一些很好的答案,所以我不会添加重复他们所说的一切的答案。基本上,我使用
。isPresent()
当我需要检查一个元素是否在我期望的DOM中存在时。我使用
.presenceOf()
当我需要等待一个元素出现在DOM中时。也就是说,它以前不在DOM中,但我做了一些最终会出现的事情。就像你提到的,等待按钮或字段出现/消失或类似的事情。
 presenceOf(elementFinder: ElementFinder): Function {
    return elementFinder.isPresent.bind(elementFinder);
  };