如何使用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;
如果有人为此工作,请您分享解决方案?
无法直接通过API进行操作,因此您必须使用脚本注入。
确定元素在视口中是否可见的最佳方法是使用document.elementFromPoint将元素放置在假定的位置。如果它不在视口和您的元素中,则返回null;如果它不在其子元素中,则返回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); }