如何手动使用量角器ExpectedCondition?

时间:2018-04-26 12:11:55

标签: javascript selenium protractor expected-condition

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

expect(elementIsVisible).toBe(true);

我看到量角器有EC (expected conditions),即EC.visibilityOf,这似乎是我正在寻找的。但是,我并不完全确定visibilityOf返回的内容。

我发现the docs非常模糊:

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

它返回什么? Promise预期条件

好吧,考虑到链接.then触发then is not a function,它似乎会返回预期条件。但是那是什么?

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

我不想那样使用它,我想在true条件下获得false / expect值。

如果我试图从Selenium的例子中找到更多信息,Protractor(一个javascript实现)会重定向到Java documentation ......

1 个答案:

答案 0 :(得分:1)

visibilityOf和所有其他ExpectedConditions返回函数。您可以调用此函数,然后获得Promise<boolean>。基本上所有ExpectedCondition都是谓词 - 函数,当调用返回promise时解析为boolean(应该不会抛出异常)。所以基本上你可以尝试使用这样的东西:

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 - 您可以尝试我的lib来断言元素的可见性: https://github.com/Xotabu4/jasmine-protractor-matchers

因此,您不仅可以检查元素可见性,而且matcher会自动等待元素变为可见。检查一下:

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

README.MD中的更多示例