Как выполнить горизонтальную прокрутку windows в веб-приложении с несколькими элементами прокрутки? - PullRequest
1 голос
/ 22 января 2020

Вариант использования: Выполнить горизонтальную прокрутку, пока не будет найден элемент

Предварительные требования: Селен - Java 3.141 / chrome

Ниже приведены мои несколько примеров фрагментов

JavascriptExecutor jse = (JavascriptExecutor) driver; //create jse object and with this object, execute js

jse.executeScript("arguments[0].scrollLeft += 250",driver.findElement(By.className("wux-scroller")));
jse.executeScript("window.scrollBy(500,0)"); 
jse.executeScript("scroll(500, 0)");
jse.executeScript("window.scrollTo(500,0)"); 
jse.executeScript("arguments[0].scrollIntoView();",el); 
jse.executeScript("arguments[0].scrollLeft = arguments[1];",driver.findElement(By.className("wux-scroller")), j)

Ожидаемый результат: Для горизонтальной прокрутки windows до отображения элемента

Фактический результат: Прокрутка не происходит, но также не выдается никаких исключений

Примечание:

  • Страница имеет как горизонтальную, так и вертикальную полосу прокрутки

  • Оба элемента прокрутки имеют один и тот же класс <div class="wux-scroller wux-ui-is-rendered" >

  • (я думаю) Windows стандартные скроллеры используются как для вертикальной, так и для горизонтальной прокрутки. Изображение прилагается. enter image description here

  • Если I заменить scrollLeft на scrollTop в указанном выше фрагменте, затем прокрутите происходит вертикально хорошо

Ссылка ниже, но не помогает

как прокрутить горизонтальную полосу прокрутки, которая находится внутри окна, используя java

Обновление 2:

Пожалуйста, найдите прикрепленное изображение для небольшого подробного описания.

enter image description here

Обратите внимание:

  1. Есть два контейнера с горизонтальной прокруткой. Это вызывает некоторые проблемы?
  2. контейнер gridengine является заполнителем для 'wux-scroller' и активируется, когда пользователь прокручивает его вручную

// Попытка с использованием нижеприведенных фрагментов, но не работа.

JavascriptExecutor jse = (JavascriptExecutor) driver;    
jse.executeScript("window.scrollBy(-2000,0)");    
jse.executeScript("arguments[0].scrollLeft = arguments[1];",driver.findElement(By.className("wux-layouts-gridengine-scroller-container")), 500);    
jse.executeScript("arguments[0].scrollLeft = arguments[1];",driver.findElement(By.className("wux-scroller")), 500);

Обновление 3: решение

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

 jse.executeScript("document.getElementsByClassName('wux-scroller wux-ui-is-rendered')[0].scrollLeft += 650");

jse.executeScript("document.getElementsByClassName('wux-scroller wux-ui-is-rendered')[0].scrollTo(350,0)");

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Вам нужно проверить прокрутку или вам нужны элементы? Во втором случае вы можете добавить --headless аргумент в драйвер. Если этого будет недостаточно, добавьте window-size аргумент с большим разрешением.

0 голосов
/ 22 января 2020

Пожалуйста, попробуйте следующий код, используя Javascript, но с другим атрибутом

WebElement element = driver.findElement(By.className("wux-scroller"));

WebDriverWait wait = new WebDriverWait(driver, 30);

 wait.until(ExpectedConditions.visibilityOf(element));

JavascriptExecutor jse = (JavascriptExecutor) driver; 

jse.executeScript("arguments[0].scrollIntoView({behavior: \"auto\", block: \"center\", inline: \"nearest\"});", element);

ИЛИ

jse.executeScript("arguments[0].scrollLeft = arguments[0].offsetWidth", element );
...