Прокрутка с использованием Selenium WebDriver с Java - PullRequest
10 голосов
/ 25 февраля 2012

Я использую Selenium WebDriver для автоматизации моих тестов браузера. Заголовок моего браузера является плавающим и всегда присутствует независимо от прокрутки браузера .

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

Но из-за автоматической прокрутки элементы прокручиваются позади плавающего заголовка, и когда над ними выполняется какое-либо действие, элементы в заголовке страницы щелкаются.

Есть ли способ ограничить прокрутку по умолчанию для WebDriver ?

Ответы [ 8 ]

5 голосов
/ 24 марта 2012
    Locatable hoverItem = (Locatable) driver.findElement(By.xpath("//li[text()='Reklama w Google']"));
    int y = hoverItem.getCoordinates().getLocationOnScreen().getY();
    ((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+y+");");
4 голосов
/ 30 августа 2012

Если вы хотите прокрутить окно Firefox с помощью веб-драйвера selenium, одним из способов является использование javaScript в коде java. Код javeScript для прокрутки вниз выглядит следующим образом:

JavascriptExecutor js = (JavascriptExecutor)driver;
                    js.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight," +
                    "document.body.scrollHeight,document.documentElement.clientHeight));");
2 голосов
/ 17 ноября 2016

Для прокрутки вниз:

System.setProperty("webdriver.chrome.driver",
                   "/home/shreetesh/chromedriver");
WebDriver driver = new ChromeDriver(); 
String url = "https://en.wikipedia.org/wiki/Main_Page";
driver.get(url);
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("scroll(0, 25000);");

Для прокрутки вверх просто замените значение прокрутки на (2500, 0).

2 голосов
/ 08 августа 2014

Просто используйте .sendKeys(Keys.PAGE_DOWN);, когда ваш элемент был виден, просто нажмите на него, для .click(element).perform(); у меня сработает что-то вроде этого:

2 голосов
/ 07 июня 2013

Вы можете прокрутить до нужного местоположения, используя javascript. Для его работы необходимо использовать метод scrollTo, а не метод scrollBy.

public void scrollToElement(By by) {
    Locatable element = (Locatable) selenium.findElement(by);
    Point p= element.getCoordinates().getLocationOnScreen();
    JavascriptExecutor js = (JavascriptExecutor) selenium;  
    js.executeScript("window.scrollTo(" + p.getX() + "," + (p.getY()+150) + ");");
}
1 голос
/ 01 октября 2014

Прокрутить наверх можно сделать:

private void scrollToTop() {
    JavascriptExecutor js = (JavascriptExecutor) webDriver;
    js.executeScript("window.scrollTo(0, 0);");
}
1 голос
/ 27 июня 2013

Используйте код ниже для прокрутки вверх и вниз

Actions dragger = new Actions(driver);

WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("<Scroll bar Element >"));

// drag downwards

int numberOfPixelsToDragTheScrollbarDown = 50;

for (int i=10 ; i<500 ; i=i+numberOfPixelsToDragTheScrollbarDown) {
    try {
        // this causes a gradual drag of the scroll bar, 10 units at a time
        dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
        Thread.sleep(1000L);
    } catch(Exception e1){}
} 

// now drag opposite way (downwards)
numberOfPixelsToDragTheScrollbarDown = -50;
for (int i=500;i>10;i=i+numberOfPixelsToDragTheScrollbarDown){
    // this causes a gradual drag of the scroll bar, -10 units at a time
    dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
    Thread.sleep(1000L);
}
0 голосов
/ 31 марта 2017

У меня недавно была эта проблема из-за меню Drupal, блокирующего элемент, когда я запустил этот код:

public void scrollTo(WebElement x) {
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", x);
        }

После ссылки на эту страницу , я обновил, чтобы установить логическое значение false, используя этот код, и он прекрасно работает:

public void scrollTo(WebElement x) {
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", x);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...