在Selenium中通过元素定位会自动帮你拖拽到对应位置,所以是没有自带的scoll方法。但是这个是有限制,例如当前页面高度太长,默认是页上半部分,你定位的元素在页尾,这个时候可能就会报元素不可见的异常。我们就需要利用javaScript来实现拖拽页面滚动条。
我们一般可以两个方法去拖拽,一个是根据拖拽的坐标(像素单位),另外一个是根据拖拽到一个参考元素。
根据拖拽的坐标(scrollBy() )
scrollBy() 方法可把内容滚动指定的像素数。
注意: 要使此方法工作 window 滚动条的可见属性必须设置为true!
参数 | 描述 |
---|---|
xnum | 必需。把文档向右滚动的像素数。 |
ynum | 必需。把文档向下滚动的像素数。 |
package query;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ElementOpration {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get("https://blog.csdn.net/weixin_39218743");
Thread.sleep(1000);
JavascriptExecutor jse= (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,3301)", "");
}
}
根据另一个参考元素
package query;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ElementOpration {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get("https://blog.csdn.net/weixin_39218743");
Thread.sleep(1000);
// 定义互联网举报中心这个元素
WebElement element = driver.findElement(By.xpath("//*[@id=\"asideFooter\"]/div[2]/div/div/div[4]/p[3]/a/span"));
//创建一个javascript 执行实例
JavascriptExecutor je = (JavascriptExecutor) driver;
//执行js语句,拖拽浏览器滚动条,直到该元素到底部,马上就不可以见
je.executeScript("arguments[0].scrollIntoView(true);",element);
}
}
关于scrollIntoView(true),应该这么理解,拖动到可以看到这个元素为止,如果这个地方ture改成false,也是可以,拖动效果就有些随意了。