如何在 Java 中使用 Selenium WebDriver 和/或 Sikuli 平滑滚动

Axe*_*xel 3 javascript java selenium

作为测量 Web 应用程序 FPS 的测试套件的一部分,我需要执行网页的平滑滚动。也就是说,与用户抓住滚动条并用鼠标移动它时的平滑度相同。

到目前为止,我已经尝试使用 sikuli 模拟按键,即多次按下向上/向下箭头键来滚动整个页面。我也尝试过使用 Javascript 方法:

public void scrollSmooth(int durationOfScroll){
    long timeWhenStarting = System.currentTimeMillis() / 1000L;
while (System.currentTimeMillis() / 1000L - timeWhenStarting < durationOfScroll) {
    ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,10)", "");
    }
}
Run Code Online (Sandbox Code Playgroud)

这两种方法都无法实现它们的目的,因为它们都生成了逐步滚动,这在我同时想要测量 FPS(例如滚动时页面的平滑度)时不适合。

Age*_*der 5

解决方案比预期的要简单得多。我没有为循环使用基于时间的条件,而是尝试了以下操作:

public void scrollSmooth(){
    for(int i=0;i<6000;i++) {
        ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,1)", "");
    }
}
Run Code Online (Sandbox Code Playgroud)

这很有效,但有一个小缺点,即我无法指定滚动的长度(时间),只能指定要滚动的实际像素。