Как вручную использовать транспортир ExpectedCondition? - PullRequest
0 голосов
/ 26 апреля 2018

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

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. |
+-----------+-------------------------------------------------------------------------------------------+

Что это возвращает? A Promise или ожидаемое состояние ?

Что ж, учитывая, что цепочка .then запускает then is not a function, похоже, она возвращает ожидаемое условие . Но что это?

Во всех примерах документации Protractor это возвращаемое значение используется в browser.wait функциях.

Я не хочу использовать его таким образом, я хочу, чтобы в моем состоянии expect было значение true / false.

Если я попытаюсь найти больше информации из примеров Selenium, Protractor (реализация javascript) перенаправит на документацию Java ...

1 Ответ

0 голосов
/ 27 апреля 2018

visibilityOf и все остальные ExpectedConditions возвращают функции. Вы можете вызвать эту функцию, и вы получите 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

...