Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

При клике на чек-бокс - ElementNotVisibleException

python
webdriver
Теги: #<Tag:0x00007f7b64295068> #<Tag:0x00007f7b64294eb0>

#1

имею чек-бокс

checkbox = driver.find_element_by_xpath("//span[@class='z-checkbox' and @title='Отображение контекстных действий в нулевой колонке']/input[@type='checkbox']")
checkbox.click()

При клике по нему - возникает ошибка.

ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with

кто подскажет почему так?


(mipan) #2

проверьте вручную, в каком-нибудь firepath, виден ли в этот момент элемент на самом деле по данному xpath.


(rmerkushin) #3

Очень часто реальные чекбоксы делают невидимыми и отрисовывают на странице что-то свое. Попробуйте кликать по этому элементу. Если необходимо сделать клик имено по скрытому элементу, воспользуйтесь JS.


(Дмитрий Мирошник) #4

Проверьте количество элементов через driver.findAll по данному локатору.
Я почти уверен, что их >1. Скорее всего, 2. 1 видимый, 2-й - нет. И Selenium находит 1-й по счёту элемент в DOM, который оказывается невидимым.
Если я прав, решение - подкорректировать локатор, чтобы по нему находился всегда 1 элемент. Альтернативное решение - взять 2-й элемент - опасно: при изменении вёрстки страницы (например, при оптимизации уберут невидимый элемент) тесты упадут по неочевидной с 1-го взляда причине.
Другой вариант: данный чекбокс на момент запроса невидим (например, чтобы его увидеть - надо развернуть какую-то форму или div). Проверьте, сделано ли необходимое действие для визуализации элемента (например, кликнут ли плюсик на субформе, чтобы её открыть). Если да - возможно, странице не хватает времени, чтобы отрендерить объект на экране. Если проблема в этом - сделайте explicit wait с условием isVisible.