2013-08-21 2 views
1

Окружающая среда: Chrome v29, водитель Селен 2,35, chromedriver 2.2Любой способ заставить Selenium рассмотреть страницу, полностью загруженную, даже если в браузере остались незавершенные запросы?

В ряде тестов, написанных в Behat ж/Selenium вождения, все видимые элементы на странице загружены, и Speed ​​Tracer не показывает никаких запросов, ожидающих рассмотрения, но иногда браузер строка состояния говорит «Подключение», и селен, кажется, застревает в ожидании завершения этого соединения (он никогда этого не делает). В других случаях точно такая же страница загружается немедленно и обрабатывается немедленно.

Если вы позволите испытать сидеть, в конечном итоге все время заканчивается, и это не идет дальше. Если вы вручную нажмете «остановить» в браузере, селен снова начнет работать, и тест завершится без дополнительных проблем.

В идеале, мне бы хотелось выяснить, почему эти страницы висят так, но я был бы рад согласиться на путь вокруг него, что-то вроде «дайте этой странице 10 секунд, а затем подумайте», сделанный".

+0

Я лично понял, почему страница никогда не загружается. В Chrome есть вкладка «Сети» в консоли разработчика, которая сообщает вам, что загружено и что выполняется. Используйте это и убедитесь, что он проливает свет. То же самое происходит при ручном посещении браузера ** вне ** Selenium? То же самое происходит с «FirefoxDriver»? – Arran

+0

Проблема возникает за пределами Selenium и не происходит с Firefox (но FF падает на другие проблемы, где работает Chrome, поэтому обмен файлами браузеров просто изменяет, какая проблема в настоящее время блокирует меня, а не решает проблему). –

+0

На вкладке «Сеть» я вижу «GET» со статусом «(неудачно)» и тип «Ожидание» для стороннего рекламного сервера. Я уже пытался решить эту проблему, установив запрашиваемый домен на 127.0.0.1 в/etc/hosts. –

ответ

0

мы имели аналогичные проблемы в Watir-WebDriver. Поскольку API, такие как .click, .goto в watir, выполняет две вещи. Он нажимает на элемент и ждет загрузки страницы (document.readyState == "complete"), если страница не загружается в течение определенной продолжительности, определенной HTTP_TIMEOUT, время истекает. Если ваша страница зависит от множества услуг и особенно в тестовых средах, если по крайней мере одна служба работает медленно, даже если загружено 99% страницы, нажмите api на время ожидания.

Решение, которое мы имеем, заключается в том, чтобы создать api say click_no_timeout под классом Watir Element, который будет точно таким же, как click api, за исключением того, что он спасет таймаут и ничего не сделает.

Его код проекта для обработки тайм-аута в случае его действительно допустимого таймаута. Я думаю, вы можете следовать тому же подходу к селену.

0

Как было предложено Арраном, лучше всего выяснить причину загрузки страницы. Но в качестве обходного пути вы можете использовать JSExecutor для выполнения операции щелчка для навигации по страницам. Это все еще оставляет вам проблему, если главная целевая страница также требует времени для загрузки.

0

Из моего опыта, после любого взаимодействия, которое вызывает для загрузки страницы, Селен не возвращает управление до тех пор, пока страница полностью загружена