Как прокрутить определенный DIV, используя Selenium WebDriver с Java?
Некоторые WebElements не распознаются WebDriver, WebDriver не находит элемент, который не отображается в видимой области браузера.
Чтобы сделать WebElement видимым с помощью WebDriver, нам нужно сделать этот элемент видимым в режиме просмотра браузера, чтобы прокручивать вниз по определенному div! ![]()
Как я могу выполнить свое действие (прокрутить вниз и щелкнуть) в определенной области моей веб-страницы. Я много пробовал, мне это не помогло.
Пожалуйста, помогите мне решить мою проблему.
Ответы
Ответ 1
Прокрутка вниз:
import org.openqa.selenium.JavascriptExecutor;
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("scroll(0, 250)"); //y value '250' can be altered
Прокрутка вверх:
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("scroll(250, 0)"); //x value '250' can be altered
Прокрутите нижнюю часть страницы:
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));");
или
Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.END).perform();
Полный прокрутка вниз в замедленном режиме:
for (int second = 0;; second++) {
if(second >=60){
break;
}
((JavascriptExecutor) driver).executeScript("window.scrollBy(0,400)", ""); //y value '400' can be altered
Thread.sleep(3000);
}
или
JavascriptExecutor jse = (JavascriptExecutor)driver;
for (int second = 0;; second++) {
if(second >=60){
break;
}
jse.executeScript("window.scrollBy(0,800)", ""); //y value '800' can be altered
Thread.sleep(3000);
}
Прокрутите автоматически до вашего WebElement:
Point hoverItem =driver.findElement(By.xpath("Value")).getLocation();
((JavascriptExecutor)driver).executeScript("return window.title;");
Thread.sleep(6000);
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+(hoverItem.getY())+");");
// Adjust your page view by making changes right over here (hoverItem.getY()-400)
или
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath("Value')]")));
или
WebElement element = driver.findElement(By.xpath("Value"));
Coordinates coordinate = ((Locatable)element).getCoordinates();
coordinate.onPage();
coordinate.inViewPort();
Ответ 2
Самый простой способ сделать это - выполнить Javascript для прокрутки элемента вверх/вниз.
JavascriptExecutor jsExec = (JavascriptExecutor) driver;
jsExec.executeScript("document.getElementById('id').scrollDown += 100");
Ответ 3
Прежде всего, большинство ответов, размещенных здесь, находятся вне темы. Теперь я работаю с селеном 2 и селеном 3, webdriver может обрабатывать прокрутку окна, чтобы сделать элемент видимым.
Для всех, публикующих такие фрагменты, как:
driver.execute_script('scrollBy(0, 250)')
вы не получите вопрос вообще!
На самом деле я все еще не нашел способ правильно имитировать действие перетаскивания ручка прокрутки, но этот ответ кажется многообещающим - но я не пробовал.
Итак, пока у меня есть два способа сделать это для меня:
- Используйте
Keys.ARROW_DOWN
- Используйте
Keys.PAGE_DOWN
На самом деле существует третий способ: просто отказаться от селена и связаться с веб-сайтом, если они предоставляют какой-либо API.
Ответ 4
driver.get("http://www.***.com/");
driver.manage().window().maximize();
WebElement scroll = driver.findElement(By.id("someId"));
scroll.sendKeys(Keys.PAGE_DOWN);
Ответ 5
Другой способ сделать это с помощью метода JavascriptExceutor
scrollIntoView()
:
WebElement DIVelement = driver.findElement(By.xpath("xpath to div"));
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].scrollIntoView(true)". DIVelement);
Ответ 6
Сначала вам нужно прокрутить, а не найти элемент, как показано ниже:
document.getElementById("your div id").scrollTop(250);
После этого вы можете найти конкретный div.
Вы также можете попробовать:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("javascript:window.scrollBy(250,350)");
Ответ 7
Считайте, что ваш HTML выглядит следующим образом:
<div id="someId" class="className" style="position: relative; top: 0px; left: opx;>
вы можете наблюдать атрибут style
в div
проверьте значение top
, которое 0px в приведенном выше примере
Теперь попробуйте сделать что-то вроде:
$('.className').animate({top: "-60px"});
который поможет вам прокрутить вниз.
Его исполнитель JavaScript, поэтому, конечно, вам нужно его реализовать.
Ответ 8
My "WORKAROUND" - это прокрутка к позиции по координатам элемента x и y. Я также добавил смещение к y, чтобы любой верхний/нижний колонтитул или другой элемент не блокировали видимость элемента, который я хочу прокрутить.
У меня есть ответ на этот вопрос -
Selenium webdriver не может нажать ссылку за пределами страницы
Ответ 9
Ни один из опубликованных ответов не работал у меня, однако я нашел решение на основе этого сообщения.
((JavascriptExecutor) driver).executeScript(
"arguments[0].scrollTop=arguments[1].offsetTop",
divWithScrollbarElement,
elementToScrollTo);
где divWithScrollbarElement
- элемент div, который вы хотите прокрутить, а elementToScrollTo
- это дочерний элемент, который вы хотите сделать видимым (что в моем случае было фактически родителем элемента, который я изначально пытался Посмотреть). Если elementToScrollTo
пока еще не находится в DOM, вам может понадобиться использовать script один раз для прокрутки вниз, насколько это возможно, а затем снова загрузите еще несколько элементов.