2017-07-21 11 views
2

要素がビューポートに表示されているか(ブラウザの可視性)、またはSeleniumを使用していないかどうかを確認するにはどうすればよいですか?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; 

解決策を教えていただけたら、教えてください。

答えて

2

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); 
} 
+0

ありがとうFlorent B.ビューポートの要素を確認するのに役立ちました。 –

関連する問題