Подтвердить что ты не робот

Как прокрутить определенный DIV, используя Selenium WebDriver с Java?

Некоторые WebElements не распознаются WebDriver, WebDriver не находит элемент, который не отображается в видимой области браузера.

Чтобы сделать WebElement видимым с помощью WebDriver, нам нужно сделать этот элемент видимым в режиме просмотра браузера, чтобы прокручивать вниз по определенному div!

Как я могу выполнить свое действие (прокрутить вниз и щелкнуть) в определенной области моей веб-страницы. Я много пробовал, мне это не помогло.

Пожалуйста, помогите мне решить мою проблему.

4b9b3361

Ответ 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 один раз для прокрутки вниз, насколько это возможно, а затем снова загрузите еще несколько элементов.