scrollIntoView () не работает для горизонтальной прокрутки (Selenium) - PullRequest
0 голосов
/ 24 октября 2019

Я хочу прокрутить вправо до столбца. Вот что я попробовал:

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

Это работает для вертикальной прокрутки, но не для горизонтальной.

Ответы [ 5 ]

2 голосов
/ 24 октября 2019

Вы можете использовать опцию ниже для прокрутки по горизонтали

JavascriptExecutor js = (JavascriptExecutor)driver; 
js.executeScript("document.getElementById('giveLocationHorizontal').scrollLeft += 250", "");

Кроме того, я полагаю, что ниже также полезны для вас

//scroll up web page
   public void scrollUp(){
       JavascriptExecutor js = (JavascriptExecutor) driver;
       js.executeScript("window.scrollBy(0,-250)", "");
   }

    //scroll down web page
    public void scrollDown(){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("window.scrollBy(0,250)", "");
    }

    //scroll Horizontal
    public void scrollHorizontal(){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("window.scrollBy(250,0)", "");
    }
1 голос
/ 24 октября 2019

Element.scrollIntoView ()

Метод Element.scrollIntoView () прокручивает элемент, для которого он вызывается, в Окно просмотра окна браузера.


Синтаксис

  • element.scrollIntoView()
  • element.scrollIntoView(alignToTop) // Логический параметр
  • element.scrollIntoView(scrollIntoViewOptions) // Параметр объекта

Параметры

Параметры для этого метода:

  • alignToTop (Необязательно): является логическим значением, если true, верхняя часть элементабудет выровнен по верху видимой области прокручиваемого предка. Это значение по умолчанию. Если false, то нижняя часть элемента будет выровнена по нижней части видимой области прокручиваемого предка. Соответствует scrollIntoViewOptions: {block: "end", inline: "near"}.
  • scrollIntoViewOptions (необязательно): является объектом со следующими свойствами:
    • behavior (необязательно)): Определяет анимацию перехода. Один из "авто" или "гладкий". По умолчанию установлено значение «auto».
    • block (необязательно): определяет вертикальное выравнивание. Один из «начала», «центра», «конца» или «ближайшего». По умолчанию используется значение «Пуск».
    • inline (Необязательно): определяет горизонтальное выравнивание. Один из «начала», «центра», «конца» или «ближайшего». По умолчанию «ближайший».

Этот сценарий использования

Согласно вашей строке кода:

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

аргументtrue относится к логическому значению для alignToTop. Отсюда и проблема.


Решение

Для автоматизации горизонтальной прокрутки необходимо передать аргумент для параметра inline одним из следующих: -start - centre - end - nearest


Альтернатива

В качестве альтернативы вы можете использовать любую из следующих опций

  • scrollLeft(): Element.scrollLeft() свойство получает или задает количество пикселей, на которое содержимое элемента прокручивается от его левого края. Если направление элемента равно rtl (справа налево), тогда scrollLeft равно 0, когда полоса прокрутки находится в крайнем правом положении (в началепрокручивать содержимое), а затем становится все более отрицательным при прокрутке к концу содержимого.
  • scrollWidth(): Element.scrollWidth() свойство только для чтения является измерениемширины содержимого элемента, включая содержимое, не видимое на экране из-за переполнения.

Outro

Вы можете найти пару подробных подробных обсуждений в:

0 голосов
/ 24 октября 2019

Вы можете попробовать один из следующих ключей отправки:

element.sendKeys("\n");
element.sendKeys(Keys.SHIFT);
element.sendKeys(Keys.TAB);
0 голосов
/ 24 октября 2019

Если у вас есть тег th столбца, это позволит вам прокрутить до него

JavascriptExecutor jse = (JavascriptExecutor) driver;     
jse.executeScript("document.querySelector('table th:your-child').scrollIntoView();");
0 голосов
/ 24 октября 2019

Вы можете попробовать ниже, если у вас есть идентификатор

JavascriptExecutor js = (JavascriptExecutor)driver; 
js.executeScript(
    "document.getElementById('gvLocationHorizontalRail').scrollLeft += 250", "")

ИЛИ

jse.executeScript("window.scrollBy(1000,0)", "");

Источник:

http://www.softwaretestingstudio.com/scroll-selenium-webdriver-java/

ИЛИ С помощью действий

WebElement horizontalbar = driver.findElement(By.id("board") );
Actions action = new Actions(driver);

Actions moveToElement = action.moveToElement( horizontalbar );
for (int i = 0; i < 5; i++) {
    moveToElement.sendKeys(Keys.RIGHT).build().perform();
}

Источник:

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

...