Выделите элемент с помощью Selenium - PullRequest
168 голосов
/ 04 августа 2010

Есть ли способ в Selenium 1.x или 2.x прокрутить окно браузера, чтобы определенный элемент, идентифицируемый XPath, был виден браузеру?В Selenium есть метод фокусировки, но он не выполняет физическую прокрутку в FireFox.Кто-нибудь есть какие-либо предложения о том, как это сделать?

Причина, по которой мне это нужно, я проверяю нажатие элемента на странице.К сожалению, событие не работает, если элемент не виден.У меня нет контроля над кодом, который запускается при нажатии на элемент, поэтому я не могу отлаживать или вносить в него изменения, поэтому, самое простое решение, прокрутить элемент в поле зрения.

Ответы [ 31 ]

172 голосов
/ 10 декабря 2013

Пробовал много вещей в отношении прокрутки, но приведенный ниже код обеспечил лучшие результаты.

Это будет прокрутка, пока элемент не будет виден:

WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Thread.sleep(500); 

//do anything you want with the element
126 голосов
/ 20 октября 2014

Вы можете использовать класс org.openqa.selenium.interactions.Actions для перехода к элементу.

Java:

WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();

Python:

from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(driver.sl.find_element_by_id('my-id')).perform()
26 голосов
/ 23 марта 2012
JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("javascript:window.scrollBy(250,350)");

Вы можете попробовать это.

14 голосов
/ 30 августа 2012

Если вы хотите прокрутить окно Firefox с помощью веб-драйвера Selenium, одним из способов является использование JavaScript в коде Java.Код JavaScript для прокрутки вниз (до нижней части веб-страницы) выглядит следующим образом:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, Math.max(document.documentElement.scrollHeight, document.body.scrollHeight, document.documentElement.clientHeight));");
8 голосов
/ 17 мая 2013

Ориентация на любой элемент и отправка вниз клавиш (или вверх / влево / вправо), кажется, также работает.Я знаю, что это что-то вроде хака, но мне не очень нравится идея использования JavaScript для решения проблемы с прокруткой.

8 голосов
/ 04 августа 2010

Selenium 2 пытается прокрутить до элемента и затем нажать на него. Это потому, что Selenium 2 не будет взаимодействовать с элементом, если он не думает, что он видим.

Прокрутка к элементу происходит неявно, поэтому вам просто нужно найти элемент и затем поработать с ним.

8 голосов
/ 12 сентября 2014
webElement = driver.findElement(By.xpath("bla-bla-bla"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", webElement);

Для дополнительных примеров, перейдите сюда . Все на русском, но Java-код кросс-культурный:)

5 голосов
/ 08 ноября 2016

Этот фрагмент кода можно использовать для прокрутки:

C #

var element = Driver.FindElement(By.Id("element-id"));
Actions actions = new Actions(Driver);
actions.MoveToElement(element).Perform();

Там у вас есть

4 голосов
/ 07 сентября 2016

В Selenium нам нужна помощь исполнителя JavaScript для прокрутки до элемента или прокрутки страницы:

je.executeScript("arguments[0].scrollIntoView(true);", element);

В приведенном выше утверждении element является точным элементом, в котором нам нужно прокрутить.

Я попробовал приведенный выше код, и он работал для меня.

У меня есть полный пост и видео по этому вопросу:

http://learn -автоматикаком / как к прокручивать-в-вид-в-селеном WebDriver /

4 голосов
/ 27 мая 2014

Это сработало для меня:

IWebElement element = driver.FindElements(getApplicationObject(currentObjectName, currentObjectType, currentObjectUniqueId))[0];
 ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", element);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...