2015-09-05 3 views
3

Selenium ждет вызовов асинхронных ресурсов перед переходом на новую страницу.Selenium: не ждите ресурсов async

Ex.

<script src="https://apis.google.com/js/platform.js" async defer></script> 

На сайте с большим количеством внешних интерфейсов (таких как Google Analytics и доля кнопок с G +, Facebook и Twitter). Selenium тратит больше времени на ожидание асинхронных вызовов, чем на тесты.

Есть ли способ отключить это поведение, так что селен не ждет асинхронных внешних вызовов api?

ответ

3

Что вы видите page load timeout в действии. Вы можете настроить его и обработать исключение тайм-аут:

try: 
    driver.set_page_load_timeout(5) # in seconds 
except TimeoutException: 
    pass 

# continue with testing 

В дополнение к этому, вы также можете добавить Explicit Wait ждать определенного желаемого «действия» элемента появляться, так что вы можете продолжить ваши тесты немедленно после появления элемента.


Вы также можете оптимизировать его путем блокирования запросов на определенные домены, которые несвойственные для испытаний и не повредить рендеринг страницы и не влияют на тесты. Например, если вы хотите, чтобы блокировать запросы Google Analytics:

Вы также можете отключить изображения, CSS или вспышку (если это применимо в вашем случае):

+0

Это выдает ошибку, если страница занимает слишком много времени нагрузки. Я хочу, чтобы селен продолжал выполнять код и загружать страницы, даже если асинхронные ресурсы не загружены. – PaintingInAir

+0

@ PaintingInAir все в порядке, какая ошибка вы видите? Можете ли вы представить воспроизводимый пример? Благодарю. – alecxe

+0

Установка более низкого таймаута загрузки страницы приводит к исключению таймаута. Согласно документам selenium, это цель driver.set_page_load_timeout. Вторая часть вашего ответа находится на правильном пути. Поскольку все ресурсы async, которые я загружаю, являются внешними, он достигает такого же эффекта, без явного решения проблемы ожидания асинхронных вызовов. – PaintingInAir

0

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

FirefoxProfile fp = new FirefoxProfile(); 
fp.setPreference("webdriver.load.strategy", "unstable"); 
WebDriver driver = new FirefoxDriver(fp); 

подробнее: https://code.google.com/p/selenium/wiki/FirefoxDriver#-Beta-_load_fast_preference

Смежные вопросы