Mad*_*uri 5 css java selenium viewport
如何验证元素在视口中是否可见(浏览器的可见性)或不使用Selenium?
我尝试使用下面的代码,但Point对象(Y值)返回巨大的值,因为页面是可滚动的.这里有元素维度,位置和浏览器的维度,并比较它们.
Dimension weD = element.getSize(); //to get the element Dimensions
Point weP = element.getLocation(); // getting the location of the element in the page.
Dimension d = driver.manage().window().getSize(); // To get the browser dimensions
int x = d.getWidth(); //browser width
int y = d.getHeight(); //browser height
int x2 = weD.getWidth() + ewp.getX();
int y2 = weD.getHeight() + ewp.getY();
return x2 <= x && y2 <= y;
Run Code Online (Sandbox Code Playgroud)
如果有人参与其中,你能否分享一下解决方案?
它不可能直接通过API,因此您必须使用脚本注入.
确定元素在视口中是否可见的最佳方法是使用document.elementFromPoint将元素放在假定位置.如果它不在视口中,则返回null,如果不是,则返回元素或后代.
public static Boolean isVisibleInViewport(WebElement element) {
WebDriver driver = ((RemoteWebElement)element).getWrappedDriver();
return (Boolean)((JavascriptExecutor)driver).executeScript(
"var elem = arguments[0], " +
" box = elem.getBoundingClientRect(), " +
" cx = box.left + box.width / 2, " +
" cy = box.top + box.height / 2, " +
" e = document.elementFromPoint(cx, cy); " +
"for (; e; e = e.parentElement) { " +
" if (e === elem) " +
" return true; " +
"} " +
"return false; "
, element);
}
Run Code Online (Sandbox Code Playgroud)
谢谢 Florent B。转换为 python:
def is_element_visible_in_viewpoint(driver, element) -> bool:
return driver.execute_script("var elem = arguments[0], "
" box = elem.getBoundingClientRect(), "
" cx = box.left + box.width / 2, "
" cy = box.top + box.height / 2, "
" e = document.elementFromPoint(cx, cy); "
"for (; e; e = e.parentElement) { "
" if (e === elem) "
" return true; "
"} "
"return false; "
, element)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4459 次 |
| 最近记录: |