在端到端测试我们的应用程序时,我经常在等待状态转换(关闭模式,出现按钮等)。盲目的实验使我有时使用browser.wait(ExpectedConditions.presenceOf(someElement)
,而其他时候则使用browser.wait(someElement.isPresent())
。
对我来说,名称暗示它们是可互换的。但事实并非如此。在使用这些情况时,是否有什么可以帮助我确定何时使用的情况?
答案 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运算符,例如not
,or
等,期望ExpectedConditions
作为自变量presenceOf
,而isPresent
不是自变量。 / p>
有时候,您需要比检查一个特定元素browser.wait(someElement.isPresent())
更复杂的条件。这是ExpectedConditions
构造非常有用的地方,也是您需要presenceOf
的地方。