如何手动使用量角器 ExpectedCondition?

How to manually use a protractor ExpectedCondition?

我是量角器的新手,我想创建一个这样的期望:

expect(elementIsVisible).toBe(true);

我看到量角器有 EC (expected conditions),即 EC.visibilityOf,这似乎是我要找的。但是,我不完全确定 visibilityOf returns.

我发现 the docs 很晦涩:

RETURNS
+-----------+-------------------------------------------------------------------------------------------+
|   Type    |                                        Description                                        |
+-----------+-------------------------------------------------------------------------------------------+
| !function | An expected condition that returns a promise representing whether the element is visible. |
+-----------+-------------------------------------------------------------------------------------------+

它 return 是什么? Promise 预期条件?

好吧,考虑到 .then 的链式触发 then is not a function,似乎 return 是一个 预期条件 。但那是什么?

在所有 Protractor 文档示例中,此 return 值用于 browser.wait 函数。

我不想那样使用它,我想在我的 expect 条件下有一个 true/false 值。

如果我尝试从 Selenium 的示例中查找更多信息,量角器(javascript 实现)将重定向到 Java documentation...

visibilityOf 和所有其他 ExpectedConditions return 函数。你可以调用这个函数,你会得到 Promise<boolean> 。基本上所有 ExpectedConditions 都是谓词 - 函数,当被调用时 return promise 解析为布尔值(不应该抛出异常)。所以基本上你可以尝试使用这样的东西:

let shouldBeVisible = protractor.ExpectedConditions.visibilityOf
expect(
    shouldBeVisible($('div.button'))() // Notice () - this where we are manually calling predicate function to get boolean result
).toBeTruthy('Element div.button should be visible');

但幸运的是 - 如果您使用的是 JasmineJS - 您可以尝试我的库来断言元素的可见性: https://github.com/Xotabu4/jasmine-protractor-matchers

因此,您不仅会检查元素可见性,而且匹配器会自动等待一段时间以使元素可见。检查这个:

expect($('div.button')).toAppear()

README.MD中有更多示例