За последние 24 часа нас посетили 17163 программиста и 1652 робота. Сейчас ищет 921 программист ...

Ожидание завершения всех Ajax запросов и построение DOM

Тема в разделе "JavaScript и AJAX", создана пользователем Aleksandrmd, 21 июн 2017.

  1. Aleksandrmd

    Aleksandrmd Новичок

    С нами с:
    21 июн 2017
    Сообщения:
    1
    Симпатии:
    0
    Добрый день!

    Пишу тесты используя селениум, возникла следующая задача.
    Есть кнопка которая обновляет часть страницы с помощью Ajax, при этом не факт что страница изменится, но мне перед дальнейшей работой необходим дождаться построения ДОМ.
    Что бы не получить ошибку StaleElementReferenceException.
    sleep решает проблему, но это не по финшую.
    С помощью селениума этого не решить, возможно ли с помощью JS?
    У селениума есть 2 замечательных метода класса JavascriptExecutor: executeScript и executeAsyncScript. С помощью них можно выполнить js запрос, даже асинхронным запросом с контролем выполнения.
    Если универсальная возможность дождаться окончания Ajax запроса и построения ДОМ?
    document.readyState="complete" - не подходит. Это загрузка страницы его и так проверяет селением. Ajax запросы такой вызов не проверяет
    Запрос к серверу выглядит так

    PHP:
    1. RichFaces.ajax{"task",event,{'id':'1'}};returnfalse;
    Вариант $.active==0; RichFaces.JQuery.active == 0; JQuery.active == 0; - так же не подходят, я так понимаю в данном случае ajax завершается раньше, чем загружается DOM. по крайней мере у меня POST отрабатывает через 1 сек, JQuery.active == 0; становится практически сразу.
    Нашел фун. которая реально отрабатывает

    PHP:
    1. var xhr =newXMLHttpRequest();
    2. xhr.open('GET','/test/app/tasks/task.xhtml?task_id=4404',true);
    3. xhr.onreadystatechange =function(){
    4. if(xhr.readyState==4){
    5. alert("Test");
    6. }
    7. };
    8. xhr.send();

    Но тут 2 проблемы. Во первых страница по факту не будет обновлена, то запрос отработает к сервису, даже можно вернуть результат, но страница обновлена не будет. Вторая проблема как сюда примостить RichFaces.ajax, все таки '/test/app/tasks/task.xhtml?task_id=4404' не совсем то.

    Есть какой то универсальный способ дождаться выполнения Ajax запросов и формирования DOM.
     
    #1 Aleksandrmd, 21 июн 2017
    Последнее редактирование модератором: 21 июн 2017
  2. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Aleksandrmd эммм а как на счёт поиска по всему докуменут признаков осуществляемой загрузки?