人类喜欢java和selenium中的鼠标滚动

时间:2018-04-28 19:21:01

标签: java selenium selenium-webdriver

首先我想说我3天前开始编程。所以我几乎是初学者。我不打算参加除了我在这里演出之外的编程,我现在只需要一个简单的程序,我想自己做,纯粹作为一种爱好。我是用Selenium和java做的。因此,我需要一个代码,它将在Web浏览器中向下/向上滚动Web应用程序,尽可能与人类实际相同。我目前正在使用此代码:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript ("window.scrollBy (0.1500)", "");

并且没关系,但是这段代码看起来像按下向下翻页按钮而不是滚动。

之后,我想做以下事情:

js.executeScript ("window.scrollBy (0.50)", "");
js.executeScript ("window.scrollBy (0.30)", "");
js.executeScript ("window.scrollBy (0.33)", "");
js.executeScript ("window.scrollBy (0.42)", "");
js.executeScript ("window.scrollBy (0.45)", "");
js.executeScript ("window.scrollBy (0.24)", "");
js.executeScript ("window.scrollBy (0.19)", "");
js.executeScript ("window.scrollBy (0.50)", "");

所以现在这段代码将页面向下滚动,就像使用滚轮滚动鼠标一样,但正如您所看到的,它看起来并不像一个优雅的"解决方案,我确信有更好的东西,但凭借我3天的经验,这是我能做的最好的。

那么,是否有人愿意帮助我提高代码效率而不是使用数百万行来完成同样的重复工作...我不知道,例如:

js.executeScript ("window.scrollBy (0,50,45,66,78,43,56,87)", "");

在一行和几个变量中,程序可以执行需要完成的操作,并采用时间间隔和/或从中滚动的像素,来自" 0,50,45,66,78,43, 56,87"

2 个答案:

答案 0 :(得分:1)

尝试在arguments[0].scrollIntoView(true);方法中实施executeScript()

如果要向下滚动到最后,请选择FOOTER作为目标元素。

WebElement elem =  driver.findElement(By.id("ID OF FOOTER ELEMENT"));

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView(true);", elem);

如果ID不可用,您可以使用By.className("CLASSNAME OF FOOTER ELEMENT")By.xpath("XPATH SELECTOR OF FOOTER")By.cssSelector("CSS SELECTOR OF FOOTER")

注意:您可以滚动到找到目标元素选择器的任何位置。

答案 1 :(得分:0)

首先让我们使用array来存储您的coordinatesvalues

  

JavaScript阵列

     

数组可以在一个名称下保存多个值,您可以访问   通过引用这个简单语法后的索引号来获取值:

     

var array_name = [item1, item2, ...];

对于您的示例,可能如下所示:

var values = [0.50, 0.33, 0.33, 0.42, 0.45, 0.24, 0.19, 0.50];

现在,您可以为使用上面创建的function中存储的所有值的滚动创建自己的array。结合一个循环,这将重复。

function scrollFunction() {

    // Creating our needed variables
    var values, vLength, I;

    // Filling the array
    values = [0.50, 0.33, 0.33, 0.42, 0.45, 0.24, 0.19, 0.50];
    vLength = values;

    // By using this for-loop this process will repeat with with all of the variables from the array. However the next value is used, not the same one every time!
    for (i = 0; i < vLength; i++) {
        window.scrollBy (values[i], ""); // Update: deleted one ")"
    }
}

要创建平滑滚动效果,我建议使用不同的滚动功能:

window.scrollBy({ top: values[i], left: 0, behavior: 'smooth' });