Seleniumのデフォルトの動作では、要素がビューポートの上部にほとんど見えないようにスクロールします。また、すべてのブラウザがまったく同じ動作をするわけではありません。これは非常に不満です。私が行っているように、ブラウザーテストのビデオを記録する場合は、要素をスクロールして表示し、垂直方向の中央に配置する必要があります。ます。
これがJavaの私の解決策です:
public List<String> getBoundedRectangleOfElement(WebElement we)
{
JavascriptExecutor je = (JavascriptExecutor) driver;
List<String> bounds = (ArrayList<String>) je.executeScript(
"var rect = arguments[0].getBoundingClientRect();" +
"return [ '' + parseInt(rect.left), '' + parseInt(rect.top), '' + parseInt(rect.width), '' + parseInt(rect.height) ]", we);
System.out.println("top: " + bounds.get(1));
return bounds;
}
そして、スクロールするには、次のように呼び出します。
public void scrollToElementAndCenterVertically(WebElement we)
{
List<String> bounds = getBoundedRectangleOfElement(we);
Long totalInnerPageHeight = getViewPortHeight(driver);
JavascriptExecutor je = (JavascriptExecutor) driver;
je.executeScript("window.scrollTo(0, " + (Integer.parseInt(bounds.get(1)) - (totalInnerPageHeight/2)) + ");");
je.executeScript("arguments[0].style.outline = \"thick solid #0000FF\";", we);
}