Есть длинная страница с вертикальным скролом. По нажатию на кнопку она страница скролится вниз к определённому элементу. Нужно как-то убедиться в работе данной кнопки - проверить, что элемент после нажатия расположен в видимой части страницы.
1 лайк
можно попробовать гетнуть координаты кнопки после первого нажатия и сранить с ожидаемыми координатами
ой, запутал вас немного - “она” это страница, а не кнопка. То есть кнопка мне совсем не нужна после нажатия
Нашёл способ:
- получаю начало видимой области через js: minPositionY = “return window.pageYOffset”
- получаю координаты проверяемого элемента: elementPositionY = webElement.getLocation().getY()
- и проверяю что elementPositionY-minPositionY > 0 && elementPositionY-minPositionY < heightDisplayedArea/2
, где heightDisplayedArea = ~950 (разрешение xxxx*1080) - эмпирически рассчитанная высота видимой области. Делю на 2 так как элемент должен располагаться вверху видимой части страницы
Замудрил конечно, если кто знает лучшее решение буду рад увидеть
Можно через ExpectedCondition.visibilityOf() или просто element.isDisplayed()
Вопрос не в том, что он “вообще” отображен, а находится именно во viewport страницы.
Самое адекватное это делать через JS.
У некоторых фреймворков есть готовый метод для проверки элемент в viewport, к примеру -
https://webdriver.io/docs/api/element/isDisplayedInViewport.html
Но при желании легко реализовать самому (пример на protractorjs):
const isInViewport = await browser.executeScript(function (elem) {
const bounding = elem.getBoundingClientRect();
return (
bounding.top >= 0 &&
bounding.left >= 0 &&
bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
bounding.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}, $('some web element'))
console.log(`Is element in viewport?`, isInViewport)