简体   繁体   English

Selenium Webdriver(Java)创建滚动类

[英]Selenium Webdriver (Java) Creation a class for Scrolling

I'm trying to create a class for different kind of scrolls (Scroll up, down, bottom of page, Etc), but I can't do it work. 我正在尝试为不同类型的滚动创建一个类(向上,向下,页面底部等),但我无法完成。

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.chrome.ChromeDriver;

public class ScrollPage {

    public static void scrolldown(String element) throws Exception {

        System.setProperty("webdriver.chrome.driver", "C:\\JAVA\\DRIVER\\chromedriver.exe");
        ChromeDriver driver = new ChromeDriver();       

        //Scroll 1/4 página
        JavascriptExecutor jse1 = (JavascriptExecutor) driver;
        jse1.executeScript("scroll(0,250);");
        }
    /*
        public static void scrolldown2(String element) throws Exception {       
        //Scroll hasta la mitad
        JavascriptExecutor jse2 = (JavascriptExecutor) driver;
        jse2.executeScript("scroll(0,500);");
        }

        public static void scrolldown3(String element) throws Exception {       
        //Scroll hasta el final
        JavascriptExecutor jse3 = (JavascriptExecutor) driver;
        jse3.executeScript("scroll(0,1000);");
        }
   */   
        //Otra forma de Scroll hasta el final
 /*     JavascriptExecutor jse = (JavascriptExecutor)driver;
        jse.executeScript("window.scrollTo(0,Math.max"
                + "(document.documentElement.scrollHeight,"
                + "document.body.scrollHeight,document.documentElement.clientHeight));");

    public static void scrollup(String element) throws Exception {  
        //Scroll hasta arriba
        JavascriptExecutor jse4 = (JavascriptExecutor) driver;
        jse4.executeScript("scroll(1000,0);");
        }

        public static void slowmotion (String element) throws Exception {   
        //Scroll en cámara lenta
        for (int second = 0;; second++) {
            if(second >=60){
                break;
            }
        ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,1000)", "");
        }


    }
*/
}

After that, in another class, I want to call a specific scroll: 之后,在另一个类中,我想调用一个特定的滚动:

ScrollPage.scrolldown(); ScrollPage.scrolldown();

Please, help me. 请帮我。

I see a lot of errors in your code: 我在您的代码中看到很多错误:

  1. You are messing driver instantiation within scrolldown method. 您正在使用scrolldown方法弄乱驱动程序实例化。 Remove all non-scroll related stuff from it. 从中删除所有与滚动无关的内容。
  2. For scrolling to work, obviously, some scrollable web-page should be opened. 为了滚动工作,显然,应该打开一些可滚动的网页。 In your scroll method no page is opened - just blank browser start page. 在您的滚动方法中,不会打开任何页面-只是空白的浏览器起始页面。 Use driver.get(<some url>) method for that driver.get(<some url>)使用driver.get(<some url>)方法
  3. Once scrollable page is opened - call (JavascriptExecutor)driver.executeScript("window.scrollBy(0,250)", ""); 一旦打开可滚动页面-调用(JavascriptExecutor)driver.executeScript("window.scrollBy(0,250)", ""); to scroll window by 250 pixels 将窗口滚动250个像素

This isn't a Selenium Java issue, this has to do with object oriented programming. 这不是Selenium Java的问题,这与面向对象的编程有关。 Are you familiar with how java classes work? 您熟悉Java类的工作方式吗?

  1. Create a new class, called something like ScrollMethods, and put all your scroll methods in that class. 创建一个名为ScrollMethods之类的新类,并将所有滚动方法放入该类中。

  2. In your test, then you just need to instantiate that class: 在测试中,您只需要实例化该类:

    ScrollMethods scrollMethods = new ScrollMethods(); ScrollMethods scrollMethods = new ScrollMethods();

Now you should be able call the Scroll Methods within your test class. 现在,您应该可以在测试类中调用Scroll Methods。

You have used wrong java Script command to Scroll the window. 您使用了错误的Java Script命令滚动窗口。

Try This :- 尝试这个 :-

 JavascriptExecutor jse1 = (JavascriptExecutor) driver;
        jse1.executeScript("window.scroll(0,250);");

I had some issues in my code. 我的代码中有一些问题。

The right one would be next: 正确的是下一个:

 package Util; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.chrome.ChromeDriver; public abstract class ScrollPage { public static void doScrollDown250(ChromeDriver driver)throws Exception{ JavascriptExecutor jse = driver; jse.executeScript("scroll(0, 250);"); } public static void doScrollDown500(ChromeDriver driver)throws Exception { JavascriptExecutor jse2 = (JavascriptExecutor) driver; jse2.executeScript("scroll(0,500);"); } public static void doScrollUp(ChromeDriver driver)throws Exception { JavascriptExecutor jse2 = (JavascriptExecutor) driver; jse2.executeScript("scroll(0,000);"); } public static void doScrolldown1000(ChromeDriver driver)throws Exception { JavascriptExecutor jse3 = (JavascriptExecutor) driver; jse3.executeScript("scroll(0,1000);"); } //Slow Motion Down public static void slowmotionDown(ChromeDriver driver) throws Exception { for (int second = 0;; second++) { if(second >=60){ break; } ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,13)", ""); } } //Slow Motion Up public static void slowmotionUp(ChromeDriver driver) throws Exception { for (int second = 0;; second++) { if(second >=60){ break; } ((JavascriptExecutor) driver).executeScript("window.scrollBy(1000,13)", ""); } } //From Left to Right public static void Left2Right(ChromeDriver driver) throws Exception { JavascriptExecutor js = (JavascriptExecutor)driver; js.executeScript("window.scrollBy(2000,0)", ""); } //From Right to Left public static void Right2Left(ChromeDriver driver) throws Exception { JavascriptExecutor jsx = (JavascriptExecutor)driver; jsx.executeScript("window.scrollBy(-2000,0)", ""); } //Scroll Down the Element Web, in this case, Ver Detalles del Plan (Modify the Xpath) public static void WebElement (ChromeDriver driver) throws Exception{ ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath("//*[@id='option1']/div[1]/div[5]/a"))); } } 

After that, in another class, we will call any of these methods with this sentence: 之后,在另一个类中,我们将用以下语句调用以下任何方法:

ScrollPage.slowmotionDown(driver);
            Thread.sleep(3000);

Please remember declarate the imports and the ChromeDriver 请记住声明导入和ChromeDriver

import org.openqa.selenium.chrome.ChromeDriver; 导入org.openqa.selenium.chrome.ChromeDriver;

import Util.ScrollPage; 导入Util.ScrollPage; public class banner1 extends ScrollPage { 公共类banner1扩展ScrollPage {

public static void main(String[] args) throws Exception {

    System.setProperty("webdriver.chrome.driver", "C:\\JAVA\\DRIVER\\chromedriver.exe");
    ChromeDriver driver = new ChromeDriver();   

For Scrollpage slowmotion down, the code is: 对于向下滚动页面慢动作,代码为:

public static void slowmotionDown(InternetExplorerDriver driver) throws Exception {
        for (int second = 0;; second++) {
            if(second >=60){
                break;
            }
            ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,13)", "");
        }
    }

For Scrollpage slowmotion up, the code is: 对于向上滚动页面,代码为:

 public static void slowmotionUp(InternetExplorerDriver driver) throws Exception {
        for (int second = 0;; second++) {
            if(second >=60){
                break;
            }
            ((JavascriptExecutor) driver).executeScript("window.scrollBy(1000,-13)", "");
        }
    }

This is working fine. 一切正常。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM