it-roy-ru.com

Прокрутка с использованием Selenium WebDriver с Java

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

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

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

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

10
Rogers Jefrey L
    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+");");
5
TomaszB

Если вы хотите прокрутить окно 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));");
4
Ankit Pandey

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

clicker = new Actions(driver);
    clicker.sendKeys(Keys.PAGE_DOWN);
    Thread.sleep(1000);
    clicker.click(button).perform();     
    Thread.sleep(1000);
2
Artemy

Вы можете прокрутить до нужного места, используя 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) + ");");
}
2
EsotericNonsense

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

private void scrollToTop() {
    JavascriptExecutor js = (JavascriptExecutor) webDriver;
    js.executeScript("window.scrollTo(0, 0);");
}
1
Jonathan L

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

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).

1
BazingaRtshe

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

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);
}
1
Maddy

У меня недавно была эта проблема из-за меню 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);
        }
0
bjones01001101