使用java在Selenium WebDriver(Selenium 2)中向上或向下滚动页面

时间:2012-09-06 04:51:39

标签: java scroll selenium-webdriver selenium-rc

我在Selenium 1(a.k.a Selenium RC)中编写了以下代码,用于使用java进行页面滚动:

selenium.getEval("scrollBy(0, 250)");

Selenium 2(WebDriver)中的等效代码是什么?

16 个答案:

答案 0 :(得分:93)

向下滚动

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)", "");

或者,你可以这样做:

jse.executeScript("scroll(0, 250);");

向上滚动

jse.executeScript("window.scrollBy(0,-250)", "");
OR,
jse.executeScript("scroll(0, -250);");

答案 1 :(得分:37)

滚动到页面底部:

JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");

答案 2 :(得分:12)

在Selenium Webdriver中有很多方法可以向上和向下滚动我总是使用Java Script来做同样的事情。

如果我想向上或向下滚动

,下面的代码总是对我有用
$('select[name=mem_type]').change(function(){
    var tmp = this.value;
    $('.form-row').hide();

    if(tmp=="SKATER" || tmp=="HOCKEY" || tmp=="HOCKEYA") {
        $('.member-type').show();
    } else if(tmp=="BUILD") {
        $('.bs-member-type').show();
    } else if(tmp=="ARENA") {
        $('.arena-member-type').show();
    } else if(tmp=="PRO") {
        $('.pro-member-type').show();
    }

});

您可以从Scroll Page in Selenium

获取完整代码

如果你想滚动一个元素,那么下面一段代码将适合你。

 // This  will scroll page 400 pixel vertical
  ((JavascriptExecutor)driver).executeScript("scroll(0,400)");

您将在此处获得完整的文档Scroll for specific Element

答案 3 :(得分:10)

这可能不是您问题的准确答案(就WebDriver而言),但我发现java.awt库比selenium.Keys更稳定。 因此,使用前者的向下翻页操作将是:

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);

答案 4 :(得分:3)

JavascriptExecutor js = ((JavascriptExecutor) driver);

向下滚动:

js.executeScript("window.scrollTo(0, document.body.scrollHeight);");

向上滚动:

js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");

答案 5 :(得分:1)

我不想使用JavaScript或任何外部库,所以这是我的解决方案(C#):

IWebElement body = Driver.FindElement(By.TagName("body"));

IAction scrollDown = new Actions(Driver)
    .MoveToElement(body, body.Size.Width - 10, 15) // position mouse over scrollbar
    .ClickAndHold()
    .MoveByOffset(0, 50) // scroll down
    .Release()
    .Build();

scrollDown.Perform();

您还可以轻松地将其作为向上或向下滚动任何元素的扩展方法。

答案 6 :(得分:0)

试试这个

        Actions dragger = new Actions(driver);
        WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("//*[@id='jobreslist_outercontainer']/div/div[2]/div"));

        // drag downwards
        int numberOfPixelsToDragTheScrollbarDown = 50;
        for (int i=10;i<500;i=i+numberOfPixelsToDragTheScrollbarDown){
            try{
        // this causes a gradual drag of the scroll bar, 10 units at a time
        dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
        Thread.sleep(1000L);
            }catch(Exception e1){}
        } 

        // now drag opposite way (downwards)
        numberOfPixelsToDragTheScrollbarDown = -50;
        for (int i=500;i>10;i=i+numberOfPixelsToDragTheScrollbarDown){
        // this causes a gradual drag of the scroll bar, -10 units at a time
        dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
        Thread.sleep(1000L);
        }

答案 7 :(得分:0)

您应该向页面添加滚动条,以使用Selenium.executeScript("window.scrollBy(0,450)", "")选择所有元素。

如果您有一个大型列表,请在执行过程中多次添加滚动。请注意,滚动仅转到页面中的某个点,例如(0,450)。

答案 8 :(得分:0)

JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");

此代码适用于我。作为我测试的页面,我们向下滚动时加载。

答案 9 :(得分:0)

Javascript执行程序总能完美地完成工作:

((JavascriptExecutor) driver).executeScript("scroll(0,300)");

其中(0,300)分别是水平和垂直距离。根据您的要求设置距离。

如果您是一个完美主义者,并希望在第一次尝试时向上滚动,请使用此工具MeasureIt。它是一个出色的firefox附加组件。

答案 10 :(得分:0)

感谢Ripon Al Wasim的回答。我做了一些改进。由于网络问题,我重试三次直到中断循环。

driver.get(url)
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
try_times = 0
while True:
    # Scroll down to bottom
    driver.execute_script("window.scrollBy(0,2000)")

    # Wait to load page
    time.sleep(scroll_delay)
    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")

    if last_height == new_height:
        try_times += 1

    if try_times > 3:
        try_times = 0
        break
    last_height = new_height

答案 11 :(得分:0)

1。要将页面滚动到底部,请使用window.scrollTo(0,document.body.scrollHeight)作为参数

//要导航到底部的代码

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollHeight));

2。要将页面滚动到顶部,请使用window.scrollTo(0,document.body.scrollTop)作为参数

//代码导航到顶部

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollTop));

3。要将页面滚动到“左”,请使用window.scrollTo(0,document.body.scrollLeft)作为参数

//向左导航的代码

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollLeft));

4。滚动到特定点 window.scrollTo(0,500)作为参数

//代码以导航到特定点,例如这里将500作为值传递

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,500));

要直接在浏览器中检查导航,请在浏览器中打开开发人员工具,然后导航到控制台。 在控制台窗口上执行命令.scrollTo(0,400) enter image description here

答案 12 :(得分:0)

JavascriptExecutor最好向下滚动网页 window.scrollTo JavascriptExecutor中的函数可以做到这一点

JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0,100"); 

以上代码将向下滚动100 y个坐标

答案 13 :(得分:0)

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)");

答案 14 :(得分:0)

Javascript

我们可以滚动到特定元素:

const element = await driver.findElement(...)
await driver.executeScript("arguments[0].scrollIntoView(true);", element)
await driver.sleep(500);

答案 15 :(得分:-1)

  1. 如果要垂直滚动页面以执行某些操作,可以使用以下JavaScript进行操作。     (((JavascriptExecutor)驱动程序).executeScript(“ window.scrollTo(0, document.body.scrollHeight)”);

        Where ‘JavascriptExecutor’ is an interface, which helps executing JavaScript through Selenium WebDriver. You can use the following code to import.
    

导入org.openqa.selenium.JavascriptExecutor;

2。如果要滚动到特定元素,则需要使用以下JavaScript。

WebElement元素= driver.findElement(By.xpath(“ // input [@ id =‘email’]”)));(((JavascriptExecutor) driver).executeScript(“ arguments [0] .scrollIntoView();”,element);

“元素”是您要滚动的定位符。

3。如果要在特定坐标处滚动,请使用以下JavaScript。
((JavascriptExecutor)驱动程序)。executeScript(“ window.scrollBy(200,300)”); 其中“ 200,300”是坐标。

4。如果要垂直向上滚动,可以使用以下JavaScript。 (((JavascriptExecutor) driver).executeScript(“ window.scrollTo(document.body.scrollHeight,0)”);

  1. 如果要在正确的方向上水平滚动,请使用以下JavaScript。 (((JavascriptExecutor)driver).executeScript(“ window.scrollBy(2000,0)”);

  2. 如果要在左侧水平滚动,请使用以下JavaScript。 (((JavascriptExecutor)driver).executeScript(“ window.scrollBy(-2000,0)”);