0

Я тестирую веб-приложение, которое необходимо обновлять один из элементов заголовка каждые 5 секунд. Этот элемент заголовка обновляет всех пользователей с сообщением всякий раз, когда выдает Quote/Policy любому, кто использует это же приложение в группе. Таким образом, наши разработчики постоянно делают звонки AJAX каждые 5 секунд на всех страницах и для всех пользователей.WebDriver ждет загрузки страницы для непрерывных вызовов AJAX в фоновом режиме

Для навигации по различным страницам, я сначала с помощью неявного ожидания, как,

DRIVER.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

После этого непрерывный AJAX вызовов, я должен был использовать WebDriver ждать явную функцию и искать видимость объекта при навигации по страницам; как,

Wait<WebDriver> wait = new WebDriverWait(DRIVER, 20); 
wait.until(visibilityOfElementLocated(By.id(objID))); 

(Пожалуйста, обратите внимание visibilityOfElementLocated еще одна функция, которая также выполняет обработку исключений.)

Мой вопрос сейчас, это явные вызовы изменения кода отлично работает, когда я запускать скрипты в IE 8. Но, когда я запускаю это в IE 9, он по-прежнему ведет себя так же и бесконечно ждет загрузки страницы (или дождитесь завершения этого вызова AJAX). И, если я остановлю вызовы браузера (нажав Esc или x ссылку), мой сценарий продолжается для этой страницы и снова висит на следующей странице.

Любая идея, почему IE 9 не работает как IE 8 для загрузки страницы? Есть ли способ отладить это?

PS: Я пробовал обновлять IEDriverServer, но напрасно. Кроме того, это отлично работает в браузере Chrome и FF.

+0

как раз больше обновлений: Я попытался с IE10 и это не сработало , –

+0

Не уверен, что это помогает, но наше приложение asp .Net использует signalR для поддержания непрерывных соединений. –

ответ

0

Не могу сказать, почему IE 8/9 ведут себя по-другому. Если вы хотите дождаться завершения AJAX, вы можете вызвать оператор Javascript для проверки активных вызовов. JQuery (который, как я полагаю, вы используете) имеет $.active, который дает вам количество текущих вызовов ajax. Таким образом, вы можете использовать WebDriver как JavascriptExecutor и называем это JS сниппет:

return typeof $ === 'function' && $.active === 0; 

Когда результат верен нет AJAX продолжается, и вы можете продолжить испытания.

+0

Спасибо Кристоф Т за ответ. Мое приложение должно выполнять непрерывные вызовы AJAX (для обновления некоторых данных), поэтому я всегда получаю это значение как true. Кстати, мне нужно изменить эту строку, чтобы она работала? Потому что я назвал эту строку As-Is, я всегда получал ложь? –

+0

Это заявление, которое мы используем в наших тестах. Вы можете проверить это здесь, на этой странице, но я согласен, что это не полезно в вашем случае. Поэтому я понимаю, что ваш тест должен ждать завершения текущего запуска AJAX, не так ли? – ChristophT

0

Похоже, я понял причину (к сожалению, не решение). Это известная проблема в IEDriverServer WebDriver для IE9.

см ниже ссылке: Выпуск 6402: IEDriverServer всегда возвращает document.readyState = полные для приложения с помощью SignalR - библиотеки

https://code.google.com/p/selenium/issues/detail?id=6402