Я вижу это только в Chrome.
Полное сообщение об ошибке гласит:
"org.openqa.selenium.WebDriverException: Элемент не активен в точке (411, 675). Другой элемент получит щелчок: ..."
Элемент, который «получит щелчок», находится сбоку от рассматриваемого элемента, не сверху и не перекрывая его, не перемещаясь по странице.
Я попытался добавить смещение, но это тоже не работает. Элемент находится в отображаемом окне без необходимости прокрутки.
google-chrome
selenium
selenium-webdriver
automated-tests
user1591169
источник
источник
Ответы:
Это вызвано следующими 3 типами:
1. Элемент не виден для нажатия.
Используйте действия или JavascriptExecutor чтобы заставить его щелкнуть.
По действиям:
Автор JavascriptExecutor:
или
Затем нажмите на элемент.
2. Страница обновляется, прежде чем нажать на элемент.
Для этого заставьте страницу подождать несколько секунд.
3. Элемент кликабелен, но поверх него есть спиннер / оверлей
Приведенный ниже код будет ждать, пока наложение не исчезнет
Затем нажмите на элемент.
источник
Вы также можете использовать JavaScript click, и тогда прокрутка не понадобится.
источник
actions.MoveToElement
у меня не получалось работать в C #, и другие решения с прокруткой казались немного хрупкими, потому что была вероятность, что прокрутка может неправильно отображать элемент, или положение элемента на странице может измениться.Кажется, для этого есть ошибка в chromedriver (проблема в том, что он помечен как не исправленный) -> GitHub Link
( наградить спонсоров FreedomSponsors возможно, ?)
В комментарии № 27 предлагается обходной путь. Может быть, это будет работать для вас
источник
У меня была такая же проблема, перепробовал все предложенные решения, но у меня они не работали. в конце концов я использовал это:
Надеюсь это поможет
источник
Я видел это в ситуации, когда окно Chrome, управляемое селеном, было слишком маленьким. Элемент, по которому нужно щелкнуть, был вне области просмотра, и поэтому он не работал.
Это звучит логично ... реальный пользователь должен будет либо изменить размер окна, либо прокрутить, чтобы можно было увидеть элемент и фактически щелкнуть по нему.
После того, как я проинструктировал драйвер селена правильно установить размер окна, эти проблемы исчезли для меня. API веб-драйвера описан здесь .
источник
Вау, здесь много ответов и много хороших.
Я надеюсь, что добавлю что-то к этому из моего опыта.
Ну, ребята, в моем случае была накладка cookie, скрывающая элемент время от времени. Прокрутка до элемента также работает; но, по моему скромному мнению (для моего случая - не панацея для всех), самое простое решение - просто перейти на полный экран (я запускал свои сценарии на 3/4 окна)! Итак, поехали:
Надеюсь, это поможет!
источник
рубин / Watir-WebDriver / хром
Я использую следующий трюк и похоже, что он работает:
источник
Я тоже боролся с этой проблемой. Код отлично работает в FF, не работает в Chrome. То, что я пытался сделать, это щелкнуть по флажку - если его не было видно, я бы прокрутил, чтобы просмотреть, а затем щелкнуть. Даже просмотр в Chrome работает, только несколько нижних пикселей флажка не были видны, поэтому веб-драйвер отказывался нажимать на него.
Мой обходной путь заключается в следующем:
Chrome также имеет проблемы с sendKeys, иногда необходимо использовать действия. Очевидно, вам нужно знать, в каком направлении и сколько вам нужно пройти, чтобы ваш пробег мог варьироваться. Но я предпочитаю это взлому javascript, поэтому я публикую его здесь на тот случай, если кто-то найдет его полезным.
источник
Я получал эту ошибку при запуске тестов без xvfb-run. Они работали безупречно на местном уровне. При использовании chrome версии webdriver / chromedriver / chrome / java и т. Д. Идентичны.
Ошибка «не исправить» в chromedriver - ссылка на GitHub, на которую указал Тони Лампада, подсказывает, что это может быть связано с тем, что отображается / не отображается на экране.
Справочное сообщение для xvfb-run показывает следующее:
Изменение разрешения для xvfb убрало ошибку:
источник
При использовании Protractor мне это помогло:
источник
Сначала попробуйте получить последнюю версию драйвера Chrome и проверьте, решает ли он проблему.
В моем случае это не решило проблему. Но следующее решение у меня сработало. Ниже приведен код C #, но вы можете следовать той же логике на вашем конкретном языке. Что мы делаем здесь,
Шаг 1: Сфокусируйтесь на элементе, используя объект Selenium Actions,
Шаг 2: Затем нажмите на элемент
Шаг 3: Если есть исключение, то мы инициируем событие JavaScript «Click» для элемента, выполняя сценарий javascript через метод «ExecuteScript» драйвера браузера Selenium.
Вы также можете пропустить шаги 1 и 2 и попробовать только шаг 3. Шаг 3 будет работать сам по себе, но я заметил странное поведение в одном сценарии, когда шаг 3, даже если он успешно щелкнул по элементу, вызвал неожиданное поведение в других частях моего кода после щелчка по элементу.
источник
Я сделал этот метод на основе комментария от ответа Тони Лампады. Это работает очень хорошо.
источник
Я получил ту же проблему при запуске сценария селена в Python. Вот что я использовал для нажатия на элемент:
источник
Я столкнулся с подобной проблемой, когда мне приходилось ставить два флажка один за другим. Но я получал ту же ошибку, что и выше. Затем я добавил ожидание между своими шагами для проверки флажков .... это работает нормально и замечательно. Вот шаги: -
источник
Вам нужно использовать фокус или прокрутить этот элемент. Вам также, возможно, придется использовать explict wait.
ИЛИ
Элемент не кликабелен из-за Spinner / Overlay поверх него:
ИЛИ
ИЛИ
Если все еще не работа, используйте
JavascriptExecutor
источник
По-видимому, это является результатом ошибки «Не исправить» в двоичном файле драйвера Chrome.
Одно из решений, которое сработало для меня (наш пробег может меняться), можно найти в этом обсуждении в группе Google, комментарий № 3:
https://groups.google.com/forum/?fromgroups=#!topic/selenium-developer-activity/DsZ5wFN52tc
Соответствующая часть прямо здесь:
В моем случае я использую Python, поэтому, как только я получил нужный элемент, я просто использовал
Однако я ожидаю, что это сработает, только если элемент, на который вы пытаетесь щелкнуть, является ссылкой ...
источник
Я столкнулся с той же проблемой с clj-webdriver ( закрытый порт Selenium). Я только что перевел предыдущее решение для удобства. Вы можете вызвать эту функцию, прежде чем делать щелчок или что-либо еще, чтобы избежать этой проблемы.
источник
Это может произойти, если элемент меняет положение, когда драйвер пытается щелкнуть по нему (я видел это и в IE). Драйвер сохраняет исходную позицию, но к тому времени, когда он фактически нажимает на нее, эта позиция больше не указывает на этот элемент. Кстати, у драйвера FireFox такой проблемы нет, очевидно, он «щелкает» по элементам программно.
В любом случае, это может произойти, когда вы используете анимацию или просто динамически меняете высоту элементов (например
$("#foo").height(500)
). Вам нужно убедиться, что вы нажимаете на элементы только после того, как их высота "установилась". Я закончил с кодом, который выглядит следующим образом (привязки C #):В случае анимации или любого другого фактора, который вы не можете легко запросить, вы можете использовать «универсальный» метод, который ожидает, что элемент будет стационарным:
источник
Я встретил это, потому что диалоговое окно загрузки на этом элементе. Я просто решаю это, добавив ожидание, прежде чем работать с этим элементом.
Надеюсь, это поможет!
источник
Объяснение сообщения об ошибке :
Сообщение об ошибке просто говорит, что элемент, на который вы хотите нажать, присутствует, но он не виден. Это может быть покрыто чем-то или временно не видно.
Может быть много причин, почему элемент не виден в момент теста. Пожалуйста, повторно проанализируйте свою страницу и найдите правильное решение для вашего случая.
Решение для конкретного случая :
В моем случае эта ошибка возникает, когда всплывающая подсказка к элементу экрана, на котором я только что щелкнул, всплывала над элементом, который я хотел щелкнуть следующим. Defocus был решением, в котором я нуждался.
element.blur()
всплывающую подсказку, из-за которой всплывающая подсказка исчезнет.источник
Причина этой ошибки заключается в том, что элемент, на который вы пытаетесь щелкнуть, не находится в области просмотра (область, видимая пользователем) браузера. Таким образом, способ преодолеть это - сначала прокрутить до нужного элемента, а затем выполнить щелчок.
Javascript:
Ява:
источник
Ответ Тони Лампада, комментарий № 27, действительно решил эту проблему для меня, за исключением того, что он предоставил код Java, и мне нужен Python. Вот функция Python, которая прокручивает до позиции элемента и затем щелкает по нему.
Это решило проблему для меня в Chrome 34.0. Это не нанесло вреда в Firefox 28.0 и IE 11; эти браузеры не подвержены этой проблеме, но прокрутка до положения элемента перед нажатием на него все же не является плохой вещью.
источник
Может быть, это не совсем чистое решение, но оно работает:
источник
Я получал эту ошибку, потому что я тестировал зависание, а затем мне нужно было нажать на ссылку под всплывающей подсказкой. Решение было добавить,
page.find('.sp-logo').hover
прежде чемclick_link
убрать всплывающую подсказку.источник
Забавно, все время, которое я проводил, просматривая различные ответы, никто не пробовал очевидного, чего, конечно, я тоже не делал. Если ваша страница использовала один и тот же идентификатор несколько раз, как и моя («newButton»,), а нужный вам не первый найденный, то, по всей вероятности, вы получите эту ошибку. Самое простое, что можно сделать (C #):
Обратите внимание, что это FindElements, а не FindElement.
А затем проверьте, сколько результатов вернулось из поиска. Если это второй, вы можете использовать:
Или получите те, кто повторно использовал идентификаторы, чтобы исправить их.
источник
.First(x => x.Visible)
лучшее решение предполагает использование LINQ для поиска первого видимого элемента (добавление к вызову FindElements) и щелчок по нему, если он не нулевой.После тестирования всех упомянутых предложений ничего не сработало. Я сделал этот код. Это работает, но не красиво
источник
Я делаю своего рода грубую силу кликов, и это работает для меня.
источник
Если вы
jQuery
загрузили на страницу, вы можете выполнить следующую команду javascript:Пример использования Python Executor:
источник
У меня была та же проблема, и это было вызвано конфликтом идентификаторов между div и ссылкой внутри div. Драйвер нажимал на div вместо ссылки, которую я хотел. Я изменил div id, и он работал правильно.
Перед:
После:
источник
В Drupal при использовании Selenium :
источник