Как вручную использовать транспортир ExpectedCondition?

Я новичок в транспортире, и я хочу создать ожидание, как это:

expect(elementIsVisible).toBe(true);

Я видел, что транспортир имеет EC (ожидаемые условия), а именно EC.visibilityOf Кажется, это то, что я ищу. Тем не менее, я не совсем уверен, что visibilityOf возвращается.

Я нахожу документы очень неясными:

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 документацию...

1 ответ

Решение

visibilityOf и все остальные ожидаемые условия возвращают функции. Вы можете вызвать эту функцию, и вы получите Promise<boolean>, По сути, все ExpectedConditions являются предикатами - функциями, которые при вызове возвращают обещание, разрешенное в логическое значение (исключений не должно быть). В общем, вы можете попытаться использовать что-то вроде этого:

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

Таким образом, вы получите не просто проверку видимости элемента, но matcher автоматически подождет некоторое время, чтобы элемент стал видимым. Проверь это:

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

Больше примеров в README.MD

Другие вопросы по тегам