Как вручную использовать транспортир 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