Есть ли способ в Selenium 1.x или 2.x прокрутить окно браузера так, чтобы определенный элемент, идентифицированный XPath, был виден браузеру? В Selenium есть метод фокусировки, но он не выполняет физическую прокрутку в FireFox. У кого-нибудь есть предложения как это сделать?
Мне нужно это потому, что я проверяю щелчок элемента на странице. К сожалению, событие не работает, если элемент не виден. У меня нет контроля над кодом, который срабатывает при щелчке элемента, поэтому я не могу отлаживать или вносить в него изменения, поэтому самое простое решение - прокрутить элемент в поле зрения.
selenium
scroll
automated-tests
Дан по требованию
источник
источник
Ответы:
Пробовал много вещей в отношении прокрутки, но приведенный ниже код дал лучшие результаты.
Это будет прокручиваться, пока элемент не будет виден:
источник
position: fixed
на вашей странице есть элемент, который скрывает элемент, на который Selenium хочет щелкнуть. Довольно часто эти фиксированные элементы располагаются внизу, поэтому настройкаscrollIntoView(true)
перемещает их в верхнюю часть области просмотра.true
чтобы ,scrollIntoView
если объект вы прокрутки находится под где вы сейчас находитесь,false
если объект вы прокрутки выше , где вы сейчас находитесь. Мне было трудно понять это.Вы можете использовать
org.openqa.selenium.interactions.Actions
класс, чтобы перейти к элементу.Ява:
Python:
источник
Вы можете попробовать это.
источник
js.ExecuteScript("arguments[0].scrollIntoView(true);" + "window.scrollBy(0,-100);", e);
для IE и Firefox иjs.ExecuteScript("arguments[0].scrollIntoViewIfNeeded(true);", e);
для Chrome. Просто.((JavascriptExecutor) driver).executeScript("javascript:window.scrollBy(0,250)");
Это работало в Chrome. И единственное решение, которое действительно сработало для меня. Та же ситуация, что и у первого комментатора, у меня был фиксированный элемент внизу, который затемнял тот элемент, который мне нужно было щелкнуть.Если вы хотите прокрутить окно Firefox с помощью веб-драйвера Selenium, одним из способов является использование JavaScript в коде Java. Код JavaScript для прокрутки вниз (до нижней части веб-страницы) выглядит следующим образом:
источник
Ориентация на любой элемент и отправка клавиш вниз (или вверх / влево / вправо), кажется, также работает. Я знаю, что это что-то вроде хака, но мне не очень нравится идея использовать JavaScript для решения проблемы с прокруткой.
Например:
источник
var elem = driver.FindElement(By.Id("element_id")); elem.SendKeys(Keys.PageDown);
Для большего количества примеров, перейдите сюда . Все на русском, но Java-код кросс-культурный :)
источник
В Selenium нам нужна помощь исполнителя JavaScript для прокрутки до элемента или прокрутки страницы:
В приведенном выше утверждении
element
является точным элементом, где нам нужно прокручивать. Я попробовал приведенный выше код, и он работал для меня.У меня есть полный пост и видео об этом:
http://learn-automation.com/how-to-scroll-into-view-in-selenium-webdriver/
источник
Вы можете использовать этот фрагмент кода для прокрутки:
C #
Там у вас есть это
источник
Это сработало для меня:
источник
Selenium 2 пытается прокрутить до элемента и затем нажать на него. Это потому, что Selenium 2 не будет взаимодействовать с элементом, если он не думает, что он видим.
Прокрутка до элемента происходит неявно, поэтому вам просто нужно найти элемент и затем поработать с ним.
источник
WebElement.click()
требуется, чтобы элемент был виден, чтобы щелкнуть по нему. Он не будет прокручиваться от вашего имени.Используйте драйвер для отправки ключей, таких как pagedownили, downarrowчтобы отобразить элемент. Я знаю, что это слишком простое решение и может быть применимо не во всех случаях.
источник
element
на просматриваемой странице и отправка PageDownelement.SendKeys(Keys.PageDown);
работали для меня.По моему опыту, Selenium Webdriver не выполняет автоматическую прокрутку до элемента при нажатии, когда на странице имеется более одного прокручиваемого раздела (что довольно часто встречается).
Я использую Ruby, и для моего AUT мне пришлось обезьяна исправить метод click следующим образом;
Метод location_once_scrolled_into_view является существующим методом в классе WebElement.
Я ценю, что вы, возможно, не используете Ruby, но он должен дать вам некоторые идеи.
источник
module Capybara :: module Node
, и мне нужно было позвонить,native.location_once_scrolled_into_view
а не простоlocation_once_scrolled_into_view
. Я также спас::Selenium::WebDriver::Error::UnknownError
, что я часто получаю в Firefox 44.0.2. Но я считаю, что это решение недостаточно гибкое и, в конечном счете, помещает<Element>.native.location_once_scrolled_into_view
вызовы в сам приемочный тест, а затем сразу же по мереpage.execute_script('window.scrollByPages(-1)')
необходимости.Element#scroll_into_view
который делегирует Селенуlocation_once_scrolled_into_view
. Но оба они ничем не отличаются от поведения по умолчанию в Selenium, поэтому элементы переполнения могут мешать тому, что мы пытаемся щелкнуть.Сценарий Ruby для прокрутки элемента в представлении приведен ниже.
источник
Иногда я также сталкивался с проблемой прокрутки с помощью Selenium. Поэтому я использовал javaScriptExecuter для достижения этой цели.
Для прокрутки вниз:
Или также
Для прокрутки вверх:
Или,
источник
Если вы думаете, что другие ответы были слишком хакерскими, то это тоже самое, но в JavaScript не используется инъекция.
Когда кнопка находится за пределами экрана, она ломается и прокручивается к ней, поэтому повторите ее ... ¯ \ _ (ツ) _ / ¯
источник
Это повторное решение с JavaScript, но с добавленным элементом ожидания.
В противном случае
ElementNotVisibleException
может появиться, если выполняется какое-либо действие над элементом.источник
Я использовал этот способ для прокрутки элемента и нажмите:
источник
scrollIntoView(false)
сработало, ноscrollIntoView(true)
нет. Либо может работать , это зависит от вашего сценария.источник
Возможно, вы захотите посетить страницу веб-элементов прокрутки и веб- страницу Selenium WebDriver, используя Javascript :
источник
В большинстве случаев для прокрутки этот код будет работать.
источник
ЯВА
Попробуйте прокрутки для элемента использовать
x y
положение, и использованиеJavascriptExecutor
с этим аргументом:"window.scrollBy(x, y)"
.Следующий импорт:
Сначала вам нужно найти
x y
местоположение элемента.источник
Я не уверен, что вопрос по-прежнему актуален, но после обращения к документации scrollIntoView по адресу https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView .
Самое простое решение было бы
Это прокручивает элемент в центр страницы.
источник
Поведение Selenium по умолчанию заключается в прокрутке, поэтому элемент едва виден в верхней части области просмотра. Кроме того, не все браузеры ведут себя одинаково. Это очень неприятно. Если вы записываете видео своих тестов браузера, как я, то вы хотите, чтобы элемент прокручивался в поле зрения и располагался вертикально по центру .
Вот мое решение для Java:
И затем, чтобы прокрутить, вы называете это так:
источник
Вот как я это делаю с PHP webDriver для Selenium. Это работает для автономного сервера Selenium 2.39.0 + https://github.com/Element-34/php-webdriver + Firefox 25.0
Примечание: я использую настроенную версию PHP-веб-драйвера Element34. Но в ядре нет никаких изменений. Я просто использую свой «welement» вместо «element». Но это не влияет на рассматриваемый случай. Автор драйвера говорит, что «позволить почти всем вызовам API быть прямым преобразованием того, что определено в самом протоколе WebDriver». Так что у вас не должно быть проблем с другими языками программирования.
Просто нажатие не будет работать в моей настройке. Он будет выполнять прокрутку вместо щелчка, поэтому мне пришлось дважды щелкнуть, не вызывая "location_in_view ()".
Примечание. Этот метод работает для элементов, которые можно просматривать, например, для ввода кнопки типа.
Посмотрите: http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/location
Описание для JsonWireProtocol # предлагает использовать location + moveto, потому что location _in_view - это внутренний метод.
источник
Что-то, что работало для меня, было использовать метод Browser.MoveMouseToElement для элемента в нижней части окна браузера. Чудесно это сработало в Internet Explorer, Firefox и Chrome.
Я выбрал это вместо техники внедрения JavaScript только потому, что это было менее хакерским.
источник
Я проводил тестирование с компонентами ADF, и у вас должна быть отдельная команда для прокрутки, если используется отложенная загрузка. Если объект не загружен и вы пытаетесь найти его с помощью Selenium, Selenium выдаст исключение «элемент не найден».
источник
Если ничего не работает, попробуйте это, прежде чем нажать:
источник
В Java мы можем прокрутить с помощью JavaScript, как в следующем коде:
Вы можете присвоить желаемое значение переменной "elm.scrollTop".
источник
Решение:
источник
Этот код работает для меня:
источник