Я использую Java API Selenium 2 с FirefoxDriver. Когда я заполняю форму, на страницу добавляются флажки в зависимости от входных данных формы.
Я хотел бы смоделировать щелчок по этим флажкам с помощью Selenium. Элемент виден и может использоваться в обычном браузере, но селен утверждает, что элементы не видны.
"Element is not currently visible and so may not be interacted with"
Могу ли я заставить селен игнорировать невидимое состояние элементов? Как заставить Selenium взаимодействовать с невидимым элементом?
java
selenium-webdriver
джондал
источник
источник
Ответы:
Selenium определяет, является ли элемент видимым или нет, по следующим критериям (используйте инспектор DOM, чтобы определить, какой CSS применяется к вашему элементу, убедитесь, что вы смотрите на вычисленный стиль):
Ваш элемент соответствует одному из этих критериев. Если у вас нет возможности изменить стиль элемента, вот как вы можете принудительно сделать это с помощью javascript (предполагается, что WebDriver, поскольку вы сказали Selenium2 API):
Но это не вызовет событие javascript, если вы зависите от события изменения для этого ввода, вам также придется запустить его (много способов сделать это, проще всего использовать любую библиотеку javascript, загруженную на этой странице).
Источник проверки видимости -
https://github.com/SeleniumHQ/selenium/blob/master/javascript/atoms/dom.js#L577
Спецификация WebDriver, которая определяет это -
https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#widl-WebElement-isDisplayed-boolean
источник
Иногда это означает, что на странице есть несколько элементов с одним и тем же свойством, по которому вы пытаетесь выполнить поиск, и вы «говорите не с тем».
Если ваш элемент не может быть однозначно идентифицирован по: id или: name (или: class), это может быть сложно.
Иногда поиск элемента по: xpath помогает, а в некоторых случаях даже это непрактично.
В таких случаях вам, возможно, придется получить все элементы, соответствующие вашим критериям, и указать нужный по индексу. Это грязно, но работает.
Я использую Selenium / Watir из приложения Ruby on Rails, поэтому в моем случае пример будет следующим:
Надеюсь это поможет.
источник
У меня была аналогичная проблема, но она была связана с тем, что элемент не отображался в окне просмотра. Я сделал снимок экрана и понял, что окно браузера слишком узкое и элемент не виден. Я сделал одно из них, и это сработало:
См .: WebDriver.maximize_window ()
источник
Или вы можете использовать Selenium Action Class для имитации взаимодействия с пользователем - например
источник
Есть еще один случай, когда видимый элемент будет распознан как невидимый:
Чтобы проверить, преобразован ли элемент, с которым вы не хотите взаимодействовать, CSS, в CHROME сделайте следующее:
источник
Невидимость также может быть связана со временем, когда элемент должен появиться медленно. В этом случае может помочь заставить браузер немного подождать.
См., Например, вопрос о разрешении WebDriver ждать, пока не появится элемент .
источник
У меня была такая же проблема с селеном 2 в Internet Explorer 9, но мое исправление действительно странное. Мне не удалось щелкнуть входные данные внутри моей формы -> повторения селена, их не видно.
Это произошло, когда у моей формы были изогнутые тени -> http://www.paulund.co.uk/creating-different-css3-box-shadows-effects : в конкретном "Эффекте № 2"
Я понятия не имею, почему и как это решение псевдоэлементов остановило тесты на селен, но у меня это работает.
источник
Вы не можете принудительно получить доступ / изменить элемент, к которому пользователь обычно не имеет доступа, поскольку Selenium предназначен для имитации взаимодействия с пользователем.
Если возникает эта ошибка, проверьте:
maximize()
в node.js ,maximize_window()
в Python),executeScript()
в Node.js ,execute_script()
в Python).источник
Я просто решил эту ошибку при использовании capybara в проекте ror, добавив:
к
features/support/env.rb
.источник
Я просто решаю эту ошибку, ожидая свойства отображения элемента
источник
Я попадаю в исключение ElementNotVisibleException, используя селен для функциональных тестов на сайте django с начальными глификонами в виде ссылок в шаблонах:
Во время моих функциональных тестов стиль начальной загрузки не загружается, поэтому попытка щелкнуть по таким ссылкам вызовет исключение ElementNotVisibleException. Мне удается сделать их интерактивными, просто добавив пробел в тег, например:
источник
На этой странице есть много хороших ответов.
Оба обсуждаются в различных деталях выше. Ответа, которого я не видел, был ScrollToElement. Похоже, вы обрабатываете список элементов, а во время обработки вы создаете больше элементов, флажков. Это может привести к тому, что элементы в вашем списке переместятся с видимой страницы. Иногда элемент можно увидеть невооруженным глазом, но щелкнуть по нему просто невозможно. При обработке списков иногда приходится вставлять прокрутку.
Поскольку я наткнулся на это, я создал PageScroll.java и поместил туда свои сценарии прокрутки. Вот несколько методов из этого класса:
см. « Прокрутить элемент в представление с помощью Selenium» для получения дополнительных примеров
источник
Принятый ответ сработал для меня. Ниже приведен код для поиска родительского элемента, из-за которого Selenium думает, что он невидим.
источник
Чтобы добавить сюда свою песчинку: если элемент находится за фиксированным div, он будет считаться невидимым, и вы не сможете щелкнуть по нему; это случилось со мной недавно, и я решил, что он выполнил сценарий, как рекомендовано выше, который:
источник