На странице длинный список изображений.В приложении есть кнопка AJAX «Загрузить больше изображений» (внизу страницы), которая активируется автоматически, когда пользователь прокручивает страницу вниз.Я хочу прокрутить страницу до самого конца с помощью Selenium и убедиться, что в нижней части страницы нет кнопки «Загрузить больше изображений».Сценарий (может быть более элегантное решение, но это не главное)
browser.execute_script("""
setInterval(function() {
window.scrollBy(0,50000);
}, 1000);
;""")
invisibleShowMoreCounter = 0;
while True:
if "" == browser.find_element_by_id("show_more").text:
invisibleShowMoreCounter = invisibleShowMoreCounter + 1
if (invisibleShowMoreCounter > 3): break
time.sleep(1)
Он прокручивает страницу до конца и затем проверяет, что в течение 3 секунд не существует элемента "show_more" (не уверен, что этоцикл нужен вообще хоть).Таким образом, дело в том, что он успешно прокручивает страницу вниз, но после этого застревает на browser.find_element_by_id («show_more») до полной загрузки страницы (включая изображения), что занимает много времени.Таким образом, DOM есть, но из-за большого количества изображений загрузка всех их занимает около нескольких минут.Я не уверен на 100%, что это происходит из-за того, что страница загружена не полностью, но она выглядит очень вероятно (поэтому она переходит к первой итерации цикла, а затем просто остается на find_element_by_id в течение нескольких минут, а затем идет дальше и успешно завершена. ВопросМожет ли команда find * метод не ждать завершения загрузки всех изображений, чтобы тест не проходил в течение нескольких минут?
Настройка browser.implicitly_wait(1)
(что, похоже, имеет к этому отношение)похоже, не поможет.