English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Мы уже介绍了Selenium WebDriver тестовые методы, которые проводятся на веб-странице. Предыдущие примеры использовали простые веб-страницы для операций, возможно, вы не体会到网页加载的过程,但在实际应用过程中,加载网页是需要消耗一定时间的。Ваш скрипт已经开始运行, но элементы, которые вы хотите найти, еще не загружены, в этом случае будет выдаваться ошибка, что элемент не найден.显然,没有考虑加载时间的脚本不是一个成功的脚本。Сегодня мы расскажем, как установить время ожидания.
Три метода ожидания
time.sleep(n)
Принудительное ожидание n секунд. Функция Python, входящая в пакет time, перед использованием необходимо импортировать пакет time. Мы часто используем этот метод ожидания в наших примерах, чтобы让大家 clearer видеть результаты выполнения скрипта. Этот метод ожидания очень неуклюж, независимо от того, как быстро загружается страница, он всегда ждет n секунд, что можно сказать, очень неинтеллектуально.
implicitly_wait(n)
Наибольшее ожидание n секунд, если страница загрузится в течение n секунд, ожидание завершится досрочно. Это метод ожидания, предоставленный WebDriver, также известный как таймаут ожидания, который несколько умнее принудительного ожидания, но если страница содержит файлы, такие как超大视频 и т.д., то даже если необходимый элемент уже загружен, скрипт все равно будет ждать окончания загрузки всех файлов, что все же имеет свои недостатки.
WebDriverWait(n)
Наибольшее ожидание n секунд, проверка наличия необходимого элемента каждые несколько секунд в течение n секунд. Если элемент существует, ожидание завершается досрочно. Это метод ожидания, предоставленный WebDriver, также известный как явное ожидание, который несколько умнее таймаута ожидания, он не учитывает загрузку всего веб-страницы, а просто завершает ожидание, когда необходимый элемент существует.
Пример
Принудительное ожидание уже использовалось в предыдущих примерах, давайте посмотрим на два метода ожидания, предоставленных WebDriver
Таймаут ожидания
На самом деле, таймаут ожидания уже использовался в предыдущих примерах, но не было особенно подчеркивалось метод его использования. В этот раз мы откроем главную страницу网易, это веб-сайт с большим количеством загружаемого контента, загрузка которого, в зависимости от скорости Интернета, занимает около 10 секунд. Мы установим время ожидания в 60 секунд и затем рассчитаем, сколько времени потребуется, чтобы открыть страницу и нажать кнопку 【Открытый курс】в навигационной панели.
# coding = utf-8 from selenium import webdriver import time driver = webdriver.Chrome() driver.implicitly_wait(60) # таймаут ожидания 60 секунд time_start = time.time() # записываем время при открытии страницы driver.get('https://www.163.com/') driver.find_element_by_id('js_love_url').click() time_end = time.time() # записываем время после нажатия кнопки print('время доступа: ', time_end - time_start) # вывод времени разницы, то есть фактическое затраченное время time.sleep(2) # принудительное ожидание 2 секунд, чтобы наблюдать за тем, что мы действительно открыли страницу 【Открытый курс】 driver.quit()
Закончилось выполнение скрипта. Хотя мы установили таймаут в 60 секунд, страница загрузилась примерно через 5 секунд (смотрите мои результаты выполнения снизу), и можно нажать кнопку 【Открытый курс】. Вот результат моего выполнения, который显示了整个加载时间.
>>>время доступа: 5.717327117919922
Ожидание по умолчанию
При использовании ожидания по умолчанию необходимо импортировать класс selenium.webdriver.support.wait.WebDriverWait, API как показано ниже:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
Поскольку ожидание по умолчанию требует проверки наличия элемента, обычно его нужно использовать вместе с двумя следующими методами
until(method, message='') until_not(method, message='')
Внимание, метод method() должен быть вызываемым методом, у него должен быть метод __call__(). В примере, давайте перепишем.
# coding = utf-8 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait import time driver = webdriver.Chrome() class button(): def __call__(self, driver): if driver.find_element_by_id('js_love_url'): return True else: return False driver.implicitly_wait(60) time_start = time.time() driver.get('https://www.163.com/') # driver.find_element_by_id('js_love_url').click() WebDriverWait(driver, 2, 0.5).until(button()) time_end = time.time() print('access time is : ', time_end - time_start) time.sleep(2) driver.quit()
После просмотра этого примера может возникнуть вопрос, почему я установил явную ожидание на 2 секунды, но не было ошибки. Потому что мы также установили скрытую ожидание, и время ожидания из обоих времени выбирается наибольшее время ожидания, поэтому в этом примере время ожидания все еще 60 секунд.
Обобщение
1. Selenium может использовать три типа ожидания, наиболее умным из которых является явная ожидание WebDriverWait()
2. При одновременном наличии скрытой и явной ожидания, эффективным временем ожидания является наибольшее время ожидания из обоих
3. В явной ожидании method() в until(method()) является вызываемым методом, его можно определить самостоятельно, а также использовать анонимные функции и другие методы, об этом мы поговорим позже
4. Установка скрытой ожидания один раз, то есть на протяжении всего скрипта, принудительная ожидание должна быть установлена в каждом месте, где необходимо ожидание
Вот и все, что есть в этой статье, надеюсь, это поможет вам в изучении, и希望大家多多支持呐喊教程。
Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, содержимое предоставлено пользователями Интернета, сайт не имеет права собственности, не был обработан вручную, и не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @) для сообщения о нарушении,并提供 соответствующие доказательства. Если подтвердится, сайт немедленно удаляет涉嫌侵权的内容.