Что является эквивалентным ExpectedCondition «Дождаться, пока страница не будет» фреймворка робота в Java - PullRequest
0 голосов
/ 14 февраля 2019

Я знаю, что в java существуют типы ожидания

Явное ожидание -

driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS)

Явное ожидание -

WebDriverWait wait = new WebDriverWait(driver, explicitWaitSec);
        wait.until(ExpectedConditions.elementToBeClickable(element));

Свободное ожидание -

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)                            
        .withTimeout(30, TimeUnit.SECONDS)          
        .pollingEvery(5, TimeUnit.SECONDS)          
        .ignoring(NoSuchElementException.class);

, но я запутался, какое из ожиданий и ожидаемых условий будет мне ближе всего к ключевому слову Wait Until Page Contains в Robot Framework?

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Прямого аналога нет, это возможность, явно разработанная в Robot Framework.
В то же время, вы можете достичь этого с помощью присутствииOfElementLocated () в ExpectedCondition с явным / беглым ожиданием (последнееэто просто более настраиваемая версия первой, кстати).

Для локатора используйте этот xpath:

//*[contains(., "Your Text Here")]

Это то, что Robotf Framework на самом деле делает , довольно умный, я должен признать.

0 голосов
/ 14 февраля 2019

Ожидание, пока страница содержит

Ожидание, пока страница содержит - реализация для ожидание , пока text не появится в HTML DOM .Это задокументировано как:

Keyword                     Arguments                           Documentation
-------                     ---------                           -------------
Wait Until Page Contains    text, timeout=None, error=None      Waits until text appears on current page.
                                                                Fails if timeout expires before the text appears. See the Timeouts section for more information about using timeouts and their default value.
                                                                error can be used to override the default error message.

Исходный код:

@keyword
def wait_until_page_contains(self, text, timeout=None, error=None):
    """Waits until ``text`` appears on current page.
    Fails if ``timeout`` expires before the text appears. See
    the `Timeouts` section for more information about using timeouts
    and their default value.
    ``error`` can be used to override the default error message.
    """
    self._wait_until(lambda: self.is_text_present(text),
                     "Text '%s' did not appear in <TIMEOUT>." % text,
                     timeout, error)

Таким образом, эквивалент Ожидаемые условия может быть одним из следующих:

Примечание : Одно существенное отличие состоит в том, чтов то время как wait_until_page_contains относится к текущей странице , то есть к текущему дереву DOM , ExpectedConditions основано на WebElements на текущей странице , что делает ваши тесты гораздо более детальными.

0 голосов
/ 14 февраля 2019

Есть и другие подобные функции, но эти три, в основном, используют ..

Wait Until Element Is Enabled предполагает, что элемент существует на странице, и будет ждать, пока элемент не будет включен (не только для чтения и не отключен),Если элемент не существует, он немедленно завершится ошибкой (или по истечении времени ожидания, если у вас есть неявное ожидание)

Wait Until Element is Visible предполагает, что элемент существует на странице, и будет ждать, пока элемент будет видимым.Если элемент не существует, он немедленно завершится ошибкой (или по истечении времени ожидания, если у вас есть неявное ожидание)

Wait Until Page Contains Element не делает никаких предположений об элементе.Он ожидает, пока элемент фактически не появится на странице, независимо от того, является ли он видимым, невидимым, включенным или отключенным.Это не требует неявного ожидания, так как это ключевое слово является явным ожиданием.

Наиболее полное решение - это дождаться, пока оно появится на странице, дождаться, пока оно не станет видимым, а затем дождаться его появления.быть включенным.

Если элемент всегда будет на странице, вы можете пропустить первую проверку (то есть: если нет javascript, который может создать или удалить элемент).

Еслиэлемент всегда будет включен, вам не нужно ждать, пока он станет активным (то есть: если нет javascript для отключения или включения элемента)

Для простых статических страниц вам действительно нужно толькопроверить, что элемент виден.Даже в этом обычно нет необходимости, поскольку селен не возвращается после открытия страницы, пока страница не будет загружена.Проблема возникает, когда страница динамическая.То есть, когда есть javascript, который может изменить то, что находится на странице, и является ли он видимым или включенным, после загрузки HTML.

Нет, потому что «загружен» может означать разные вещи в разныхПриложения.Браузер установит переменную document.readyState в "complete", когда закончит загрузку HTML.Вы можете проверить это в роботе с помощью функции Ожидание условия return window.document.readyState === 'complete'.Опять же, если у вас есть javascript, который запускается на странице, этого может быть недостаточно, поскольку страница может измениться после загрузки начального HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...