Selenium сообщает об ошибке ElementNotInteractableException. С элементом невозможно взаимодействовать. Как решить эту проблему?
Selenium сообщает об ошибке ElementNotInteractableException. С элементом невозможно взаимодействовать. Как решить эту проблему?

Введение

в использовании Selenium руководить Web При автоматизации тестирования мы можем столкнуться с различными нештатными ситуациями. один из них ElementNotInteractableException аномальный,Обычно это означает, что возникла проблема при попытке взаимодействия с элементами страницы. В этой статье будет подробно описана причина этого исключения и возможное решение.,И предоставьте примеры кода, которые помогут вам лучше понять и справиться с этой ситуацией.

Причина проблемы

ElementNotInteractableException Исключения обычно возникают при следующих обстоятельствах:

  1. Элемент закрыт: элементы страницы скрыты другими элементами.,В результате невозможность взаимодействовать друг с другом.,Например, щелчок, ввод и т. д.
  2. Элемент не виден: элемент страницы может существовать в структуре DOM, но из-за стиля или других факторов он не виден на странице.
  3. Элемент отключен: элемент, хотя и видимый, может быть переведен в неинтерактивное состояние (например, отключенная кнопка).
  4. Элемент находится в рамке: Если элемент находится <iframe> или <frame>внутренняя этикетка,Вам необходимо переключиться на правильный кадр, прежде чем вы сможете взаимодействовать с элементом.

Решение

против ElementNotInteractableException Исключение, мы можем использовать следующее Решение:

  1. Подождите, пока элемент станет интерактивным: Используйте соответствующую стратегию ожидания, чтобы дождаться, пока элемент станет интерактивным, прежде чем пытаться взаимодействовать с ним. Это можно сделать с помощью явное ожиданиеWebDriverWai В сочетании с условным ожиданием достижения.
  2. Убедитесь, что элемент виден: Прежде чем манипулировать элементом, убедитесь, что он виден на странице. Можно использовать ExpectedConditions.visibilityOfElementLocated Условие ожидания, пока элемент станет видимым.
  3. Проверьте состояние элемента. Прежде чем пытаться взаимодействовать с элементом, проверьте, находится ли элемент в состоянии взаимодействия, например, отключен ли он.
  4. Переключитесь на правильную структуру: Если элемент находится<frame>внутренний,Нам нужно переключиться наframeвнутренний Только тогда можноруководитьдействовать。

Пример решения

Вот пример кода, который демонстрирует, как обрабатывать ElementNotInteractableException аномальный. Допустим, мы хотим нажать кнопку, но кнопка может быть не видна до тех пор, пока не загрузится страница.

Язык кода:python
кодКоличество запусков:0
копировать
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Создать экземпляр браузера
driver = webdriver.Chrome()

# открыть страницу
driver.get("https://example.com")

try:
    # Используйте стратегию ожидания, чтобы дождаться, пока кнопка станет видимой и интерактивной.
    button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "my-button"))
    )
    
    # Прежде чем нажимать на кнопку, убедитесь, что кнопка видна.
    button.click()

except ElementNotInteractableException:
    print("Кнопка не интерактивная и невидимая")

finally:
    driver.quit()

В этом примере мы использовали WebDriverWait дождаться, пока кнопка станет интерактивной, а затем попытаться нажать ее. Если кнопка не является интерактивной или видимой, исключение перехватывается и выводится соответствующая информация.

Подвести итог

Элементы не интерактивныаномальный Прямо сейчасElementNotInteractableExceptionдаSelenium Одной из распространенных проблем при тестировании обычно является то, что состояние взаимодействия элементов страницы не соответствует ожиданиям. Используя соответствующие стратегии ожидания, гарантируя видимость элементов и проверяя их состояние, мы можем лучше обрабатывать такие исключения, тем самым повышая стабильность и надежность автоматического тестирования.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода