Прокрутка до невидимого элемента java+selenium

Добрый день, не получается сделать прокрутку до элемента, темы несомненно уже были подобные на форме, но результата нет. Локатор работающий, судя по ответам на формах js тоже должен работать. Обычный Action тоже не фурычит

Код

WebElement element = driver.findElement(By.xpath("//*[@class = "nameclass" and text() = 123]]"))
Actions action= new Actions(driver);
       action.moveToElement(element).build().perform();
or
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", element )
or
((Locatable) element ).getCoordinates().inViewPort();

Проблема собственно в том, что он пытается найти элемент которого нет, чтобы прокрутить к элементу он делает findElement и собственно на этом все, ошибка - no such element: Unable to locate element, поскольку поиск происходит в рамках текущей видимости.

Вопрос, как найти невидимый элемент, до того как к нему пройдет прокрутка?

Я бы использовал метод, типа WaitForElementPresent, после этого уже делал все действия с ним.

1 лайк

А если все это выполнить на js?

  • Сделать его видимым
  • проскроллить до элемента
  • обратно скрыть элемент

Второй вариант тоже на js

document.querySelector("locator-here").getClientRects()[0].top

Возвращает значение top для элемента. Можно выполнить этот js на странице и получить значение. На него и проскролить вниз страницу. Ну или проскролить на занчение

document.querySelector("locator-here").getClientRects()[0].top + 
document.querySelector("locator-here").getClientRects()[0].height

Я пытался использовать ожидания различные, но смысл ждать появления элемента, если нужно прокрутить страницу до этого элемента чтобы он появился. Как с этим бороться? Или WaitForElementPresent все равно найдет элемент, а потом js прокрутит до него?

У меня такое прокатывает.

$(".knoweledge-base").offset().top - $(window).scrollTop()

Скажите пожалуйста:
Элемент невидим или отсутствует?
Его в вёрстке можно найти?

Если он есть, но невидим, найдите другой - родительский - элемент, который видим и прокрутите до него.

1 лайк

Его можно найти в верстке, только если прокрутить до него

Если у него есть родительский элемент примерно в той же позиции где должен быть искомый элемент
Или
Соседний элемент, тоже примерно в той же позиции

Попробуйте их найти и скролл к ним.

да скроллит, но проблема что такие элементы повторяются, и он крутит до первой ближайшей строки, уникальности никакой нет, только если локатор составлять который я выше писал. Тут только как то делать элемент видимым нужно

напрашивается цикл
и/или фильтр по критерию
если нужно в конец мотать - когда конец подгружается
то похоже прийдется брать коллекцию
и мотать до конца
потом заново инитить коллекцию пока не найдете свой элемент с кастомным
тестом
не очень надежно конечно…

это чат какой-то?

не чат, собственно мне сейчас просто нужно прокрутить в самый низ страницы и все, будет успех. Но все методы js визуально не трогают скрол, мне нужно прям реально действия пользователя, жмакнул колесиком и полетела вниз страница.
Сам скролл на сайте работает так $(".slick-viewport").scrollTop(200)