1.DOM滚动方法

1、scrollIntoView(alignWithTop)  滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素。如果alignWithTop为true,或者省略它,窗口会尽可能滚动到自身顶部与元素顶部平齐。-------目前各浏览器均支持

2、scrollIntoViewIfNeeded(alignCenter) 只在当前元素在视窗的可见范围内不可见的情况下,才滚动浏览器窗口或容器元素,最终让当前元素可见。如果当前元素在视窗中可见,这个方法不做任何处理。如果将可选参数alignCenter设置为true,则表示尽量将元素显示在视窗中部(垂直方向)------Safari、Chrome实现了这个方法

3、scrollByLines(lineCount) 将元素的内容滚动指定的行数的高度,lineCount的值可以为正值或是负值。---Safari、Chrome实现了这个方法

4、scrollByPages(pageCount) 将元素的内容滚动指定的页面的高度,具体高度由元素的高度决定。---Safari、Chrome实现了这个方法

scrollIntoView()和scrollIntoVIewIfNeeded()作用的是元素的窗口,而scrollByLines()、scrollByPages()影响元素自身,下面是几个示例:

//将页面主体滚动5行

document.body.scrollByLines(5);

//确保当前元素可见

document.getElementById(“test”).scrollIntoView();

//确保只在当前元素不可见的情况下才使其可见

document.getElementById(“test”).scrollIntoViewIfNeeded();

//将页面主体往回滚1页

doument.body.scrollByPages(-1);

由于只有scrollIntoView被各浏览器均支持,所以这个方法最为常用。


2.滚动到指定位置

为啥使用滚动? 因为如果页面没有完全显示,element如果是在下拉之后才能显示出来,只能先滚动到该元素才能进行click,否则是不能click操作

  1. JavascriptExecutor js=(JavascriptExecutor)driver;
  2. // roll down and keep the element to the center of browser
  3. js.executeScript("arguments[0].scrollIntoView(true)", e);

其中e为指定位置元素定位.比如:driver.findElement(By.xpath(".//*[@id='page']/a[10]"))

可以封装滚动到元素的方法

  1. /**
  2. * @author hjianhui
  3. * @param element
  4. */
  5. public void scrollToElement(By by) {
  6. WebElement e = findElement(driver, by);
  7. log.info("scroll view element");
  8. JavascriptExecutor js = (JavascriptExecutor) driver;
  9. // roll down and keep the element to the center of browser
  10. js.executeScript("arguments[0].scrollIntoView(true);", e);
  11. }

打开百度,搜索selenium,向下滑动点击下一页,代码如下:

  1. import org.openqa.selenium.By;
  2. import org.openqa.selenium.JavascriptExecutor;
  3. import org.openqa.selenium.TimeoutException;
  4. import org.openqa.selenium.WebDriver;
  5. import org.openqa.selenium.WebElement;
  6. import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedCondition;
  7. import org.openqa.selenium.support.ui.WebDriverWait;
  8. import org.testng.Assert;
  9.  
  10. /**
  11. * @author Hjianhui
  12. * JavaScript.java 2016-08-04
  13. *
  14. */
  15. public class testScrollToElement{
  16.  
  17. public static void main(String[] args) {
  18.  
  19. WebDriver driver = new ChromeDriver();
  20. try{
  21. driver.get("http://www.baidu.com");
  22. JavascriptExecutor driver_js= (JavascriptExecutor) driver;
  23. //利用js代码键入搜索关键字
  24. driver_js.executeScript("document.getElementById(\"kw\").value=\"selenium\"");
  25. driver.findElement(By.id("su")).click();
  26. //等待元素页面加载
  27. waitForElementToLoad(driver, 10, By.xpath(".//*[@id='container']/div[2]/div/div[2]"));
  28. //向下滑动直到找到元素下一页
  29. driver_js.executeScript("arguments[0].scrollIntoView(true)",driver.findElement(By.xpath(".//*[@id='page']/a[10]")));
       
  30. driver.findElement(By.xpath(".//*[@id='page']/a[10]")).click();
  31. }catch (Exception e){
  32. e.printStackTrace();
  33. }
  34. driver.quit();
  35. }
  36.  
  37. /**
  38. * 在给定的时间内去查找元素,如果没找到则超时,抛出异常
  39. * */
  40. public static void waitForElementToLoad(WebDriver driver, int timeOut, final By By) {
  41. try {
  42. (new WebDriverWait(driver, timeOut)).until(new ExpectedCondition<Boolean>() {
  43.  
  44. public Boolean apply(WebDriver driver) {
  45. WebElement element = driver.findElement(By);
  46. return element.isDisplayed();
  47. }
  48. });
  49. } catch (TimeoutException e) {
  50. Assert.fail("超时!! " + timeOut + " 秒之后还没找到元素 [" + By + "]");
  51. }
  52. }
  53. }

selenium webdriver——JS滚动到指定位置的更多相关文章

  1. js滚动到指定位置

    序言:在网络上百度,关键字:“js div滚动到指定位置”,结果基本上大同小异!各种大神都给我们总结出来了四种滚动到指定位置的办法,可惜再下愚钝,每个都不会用,所以写了一个超级简单的方法来使初学者一看 ...

  2. selenium webdriver——JS滚动到最底部

    JS控制滚动条的位置: window.scrollTo(x,y); 竖向滚动条置顶 window.scrollTo(0,0); 竖向滚动条置底 window.scrollTo(0,document.b ...

  3. js滚动到指定位置显示或隐藏元素

    $(function(){ $(window).scroll(function(){ var scroll_top=$(window).scrollTop(); console.log(scroll_ ...

  4. js 获取滚动位置,滚动到指定位置,平滑滚动

    1.获取当前滚动条位置信息 var top = dom.scrollTop; // 获取y轴上的滚动位置 var left = dom.scrollLeft; // 获取x轴上的滚动位置 2.滚动到指 ...

  5. 通过scrollTop,使子元素滚动至指定位置

    想实现这样的一个功能,点击子元素,让元素滚动至指定位置,怎么实现呢? 在代码实现之前,先了解下相关关键点. 1.scrollHeight 属性 通过 scrollHeight 属性可获得子元素的滚动高 ...

  6. 利用jquery制作滚动到指定位置触发动画

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...

  7. Vue如何引入jquery实现平滑滚动到指定位置效果

    在以往的做法里首选jquery的animate实现,但是Vue里并没有这个方法.如何在Vue项目中实现点击导航平滑滚动到指定位置,为了这效果我是快要崩溃了,上网查阅了很久发现并没有真正意义上解决这个问 ...

  8. 自定义ScrollViewer的Touch事件--触摸上下移动ScrollViewer滚动到指定位置

    double mPointY;//触摸点的Y坐标 double mOffsetY;//滚动条当前位置 bool mIsTouch = false;//是否触摸 //触摸事件 private void ...

  9. ios开发之--令UITableView滚动到指定位置

    这个应用场景还是挺多的,代码如下: //获取到需要跳转位置的行数 NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow: inSect ...

随机推荐

  1. 拖拉记录上下移动--Ajax UI

    所谓的 Ajax 拖拉 UI,就是直接用鼠标进行拖拉排序,这种方式对用户来说操作速度更快. 拖拉的 UI 需要额外的前端套件,这里介绍 jQuery UI 的 Sortable Plugin,并直接使 ...

  2. linux挂载windows共享文件夹出错,提示mount error(13): Permission denied

    完整的可以工作的命令行: mount -v -t cifs -o username=clouder,password=123456,iocharset=utf8,sec=ntlm //172.28.1 ...

  3. 取出当前会话的sid、process_id.sql

    select distinct sess.SID     db_sid,                sess.SERIAL# db_serial#,                process. ...

  4. Leetcode 33

    //这题真的很有思维难度啊,前前后后弄了2个小时才写完.//一定要首先将连续的一段找出来,如果target在里面就在里面找,如果不在连续段里就在另一部分找.//如果后面二分到都是连续段也是没事了,我们 ...

  5. 同一sql表,在页面展示多级菜单

    2.

  6. POJ 1321 棋盘问题 dfs 难度:0

    http://poj.org/problem?id=1321 注意是在'#'的地方放棋子 矩阵大小不过8*8,即使是8!的时间复杂度也足以承受,可以直接dfs求解 dfs时标注当前点的行和列已被访问, ...

  7. 3d世界是怎样呈现到屏幕上的

    要把一个3d物体呈现在屏幕上,要经过一系列的步骤. 描述3d世界 把3d世界绘制在二维屏幕上 如何描述一个3D世界? 数学家早就给出了3D世界的模型,我们日常最熟悉的3维坐标系就是一个欧几里得空间(线 ...

  8. bzoj2120

    题解: 可修改莫队 我们加入一个时间T 然后在排序的时候考虑一下时间 在计算的时候也要考虑 代码: #include<bits/stdc++.h> using namespace std; ...

  9. andorid 反编译

    1. 字节码文件转java文件 smali2java是一个将smali代码反编译成java代码的工具.什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的一种语言,可以称 ...

  10. windows下jenkins安装过程中的那些坑

    在jenkins官网https://jenkins.io/download/下载2.89.4版本的war包,使用jar -jar jenkins.war命令安装,报端口被占的错误,使用jar -jar ...