Задержать работу системы до полной загрузки страницы.

Подскажите как можно задержать раьботу ситемы до полной загрузки страницы.

Проблема в том что при входе система требует залогинится. После логина она сразу выдает информацию(страница заново не загружается) но далеко не все элементы успевают загрузится и возникают ошибки. Подскажите, пожалуйста, как заставить систему подождать несколько секунд и лиш потом проверять делать работу дальше.

Пробовала

        selenium.wait(3000);  - ошибка  java.lang.IllegalMonitorStateException
        selenium.waitForPageToLoad("3000"); - не работает ( поскольку фактически страница уже считается загруженой)

 

implicitlyWait - решение вашей проблемы.

Поставте его на 30 секунд при инициализации драйвера. И все будет работать на ура.

Example:

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

Удачи!

Тут речь видимо об аякс запросе каком-то, так что implicitlyWait вряд ли поможет
В своих тестах на пайтоне использую такую штуку
 

 

def wait_for_element_to_load(driver, element):
    try:
        return WebDriverWait(driver, 20).until(lambda driver : driver.find_element_by_xpath(element))
    finally:
        pass
 
где 20 - секунды. Таким образом можно долждаться загрузки ключевого элемента.
1 симпатия

В ситуации с  implicitlyWait можно смело делать driver.findElement(By.xpath("...")), драйвер будет ждать на элемент 30 секунд (пока он появится), если его небудет - выдаст ошибку.

К примеру, если элемент найдется в течении 20 секунд - драйвер просто продолжит работу с этим элементом.

 

furious_duck, В предложеном вами варианте, вы абсолютно повторяете функционал implicitlyWait. Только вместо "NoElementException" будет выдавать "TimeOutException"...

 

тут надо определить какие элементы вам нужны сразу после загрузки и нужно ожидать именно эти элементы

как сказал furious_duck, вам необходимо использовать явные ожидания (explict wait), который реализуется с помощью WebDriverWait классом.

  1. вариант Жесть Thread.sleep(300)

  2. Ждать какого элемента
    http://seleniumcamp.com/archive/selenium-camp-2013/materials/mistakes-of-beginners/

  3. Если Ajax + Jqery JavascriptExecutor)driver).executeScript(“return jQuery.active == 0”)

Тема не обсуждается уже 1.5 года. Какой смысл в нее отвечать? С толку сбиваешь только

@joemast Ну есть потребность у человека высказать свое решение, так пусть высказывает, тем более что ответ по теме, даже верный. Из-за таких сообщений не стоит закрывать топики, потому что даже старые проблемы могут быть релевантные для кого-то.

4 симпатии

Вариант хорош когда есть jQuery, но вот на всяких react+redux этого нет. Столкнулся сейчас с такой проблемой, кто-нибудь имел дело с таким подводным камнем?
В приложении написан счётчик, но хранится от в сторе редакса, тестами я так понимаю туда не достучаться без залезания в код?

В React такого нет и не будет, ввиду его идеологии. Все пляшут вокруг компонентов. Любой ивент, затрагивающий стейт компонента, вызовет render на измененной части. Соответственно, даже полностью загруженная страница не дает никакой гарантии, что какой-либо компонент, или его части, не будут перерисовываться по различным событиям. Тут единственный вариант - ждать конкретного элемента по разнообразным готовым и кастомным expected conditions, помня о том, что React Component может, как конструктор, состоять из множества более мелких компонентов, реагирующих на свои собственные ивенты. Я на QAFest буду рассказывать про автоматизацию REACT приложений со всеми его подводными камнями.