Проблема в воде значения в поле ввода, вот :
Когда 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.
S_e_rgej
(Сергей Слётов)
23.Апрель.2019 15:41:13
#2
Классом Actions пытались воспользоваться?
import org.openqa.selenium.interactions.Actions;
Пробовал, использовать moveToElement
, но если бы это помогло - я бы не писал об этой проблеме) вот такой код:
Actions builder = new Actions(driver);
builder.moveToElement(element).click(element);
builder.build().perform();
Можно ещё как то использовать Actions ?
Valentin_G
(Valentin G )
23.Апрель.2019 15:59:08
#4
А если вообще без скролла? Он сам не подводит к полю правильно? Если просто начать вводить текст.
VatslauX
(Vatslau)
23.Апрель.2019 17:16:40
#5
Окно перемещает какой-то жабаскипт очевидно
попробуй найти этот джесник и убить его
можешь вообще взять да вырезать весь нав бар
поскольку он не является предметом теста
S_e_rgej
(Сергей Слётов)
23.Апрель.2019 18:02:41
#6
Попробуйте для скролла написать более сложный JS:
Вычислять высоту меню
Плюсовать или вычитать её к положению скролла
S_e_rgej
(Сергей Слётов)
23.Апрель.2019 18:04:06
#7
Не вырезать, а сделать его display: none, или что-то в этом роде
S_e_rgej
(Сергей Слётов)
23.Апрель.2019 18:06:31
#8
Проблема скорее всего в кривой вёрстке, когда в самом верхнем положении скролла, за меню спрятан пустой div для отступа
А меню fixed
извини, не понял, что такое “джесник”?
Вырезать нав бар каким образом ? идея хорошая, но в тестовых сценариях он используется, поэтому его надо будет возвращать.
этими строками
int elementPosition = element.getLocation (). getY ();
String js = String.format ("window.scroll (0,% s)", elementPosition-90);
я как раз и подобрал необходиму величину скрола, чтобы поле было под навигацией
S_e_rgej
(Сергей Слётов)
24.Апрель.2019 07:13:54
#12
Попробуйте вот это:
((JavascriptExecutor) webDriver).executeScript("arguments[0].scrollIntoView(false); arguments[0].focus();", element);
actions.sendKeys("<ваш_текст>").perform();
Тут:
arguments[0] - в JS передастся ваш WebElement element в качестве DOM-обьекта;
.scrollIntoView(false) - скролл, так что объект окажется внизу страницы;
.focus() - элемент станет активным;
actions.sendKeys("<ваш_текст>"); - должен ввести текст без применения каких либо скроллов.
Спасибо, этот код сработал))