t.me/atinfo_chat Telegram группа по автоматизации тестирования

Selenium скрывает поле ввода за областью навигации

selenium
firefox
Теги: #<Tag:0x00007f9c4cbfb3d8> #<Tag:0x00007f9c4cbfb1f8>

(Igor Vlasuyk) #1

Проблема в воде значения в поле ввода, вот :
картинка

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

Перед обращением я выполняю этот код:

int elementPosition = element.getLocation (). getY ();
String js = String.format ("window.scroll (0,% s)", elementPosition-90);
((JavascriptExecutor) водитель) .executeScript (JS);

Но даже после моей прокрутки ввод по-прежнему скрыт.

Также я попытался установить значение для этого поля с помощью JavaScript:

JavascriptExecutor js = (JavascriptExecutor) драйвер;
js.executeScript ("arguments [0] .setAttribute ('value', '" + date + "')", element);

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

Selenium 3.6.0 ver, FireFox 66 ver.


(Сергей Слётов) #2

Классом Actions пытались воспользоваться?

import org.openqa.selenium.interactions.Actions;


(Igor Vlasuyk) #3

Пробовал, использовать moveToElement, но если бы это помогло - я бы не писал об этой проблеме) вот такой код:

Actions builder = new Actions(driver);
		builder.moveToElement(element).click(element);
		builder.build().perform();

Можно ещё как то использовать Actions ?


(Valentin G ) #4

А если вообще без скролла? Он сам не подводит к полю правильно? Если просто начать вводить текст.


(Vatslau) #5

Окно перемещает какой-то жабаскипт очевидно
попробуй найти этот джесник и убить его

можешь вообще взять да вырезать весь нав бар
поскольку он не является предметом теста


(Сергей Слётов) #6

Попробуйте для скролла написать более сложный JS:

  1. Вычислять высоту меню
  2. Плюсовать или вычитать её к положению скролла

(Сергей Слётов) #7

Не вырезать, а сделать его display: none, или что-то в этом роде


(Сергей Слётов) #8

Проблема скорее всего в кривой вёрстке, когда в самом верхнем положении скролла, за меню спрятан пустой div для отступа
А меню fixed


(Igor Vlasuyk) #9

извини, не понял, что такое “джесник”?
Вырезать нав бар каким образом ? идея хорошая, но в тестовых сценариях он используется, поэтому его надо будет возвращать.


(Igor Vlasuyk) #10

этими строками

int elementPosition = element.getLocation (). getY ();
String js = String.format ("window.scroll (0,% s)", elementPosition-90);

я как раз и подобрал необходиму величину скрола, чтобы поле было под навигацией


(Сергей Слётов) #12

Попробуйте вот это:

((JavascriptExecutor) webDriver).executeScript("arguments[0].scrollIntoView(false); arguments[0].focus();", element);
actions.sendKeys("<ваш_текст>").perform();

Тут:

  1. arguments[0] - в JS передастся ваш WebElement element в качестве DOM-обьекта;
  2. .scrollIntoView(false) - скролл, так что объект окажется внизу страницы;
  3. .focus() - элемент станет активным;
  4. actions.sendKeys("<ваш_текст>"); - должен ввести текст без применения каких либо скроллов.

(Igor Vlasuyk) #13

Спасибо, этот код сработал))