有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助js是来进行操作。一般用到操作滚动条的会两个场景:

注册时的法律条文需要阅读,判断用户是否阅读的标准是:滚动条是否拉到最下方。    要操作的页面元素不在吸视范围,无法进行操作,需要拖动滚动条

其实,实现这个功能只要一行代码,但由于不懂js ,所以花了不小力气找到这种方法。

用于标识滚动条位置的代码

<body onload= "document.body.scrollTop=0 ">

<body onload= "document.body.scrollTop=100000 ">

如果滚动条在最上方的话,scrollTop=0 ,那么要想使用滚动条在最可下方,可以scrollTop=100000 ,这样就可以使滚动条在最下方。

场景一

先来解决场第一个问题,法律条款是一个内嵌窗口,通过firebug工具可以定位到内嵌入窗口可以定位到元素的id ,可以通过下面的代码实现。

js="var q=document.getElementById('id').scrollTop=10000" driver.execute_script(js)

注:由于法律条款的文字必须被阅读并接受才能进行下一步, 所以必须先将滚动条滑到底部,然后“接受”按钮才可用, 点击接受以后“下一步”按钮才可用。

场景二

有滚动条的页面到处可见,这个就比较容易找例子,我们以操作百度搜索结果页为例:

#coding=utf-
from selenium import webdriver
import time #访问百度
driver=webdriver.Firefox()
driver.get("http://www.baidu.com") #搜索
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep() #将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
time.sleep() #将滚动条移动到页面的顶部
js="var q=document.documentElement.scrollTop=0"
driver.execute_script(js)
time.sleep() driver.quit()

转自: http://tech.ddvip.com/2013-10/1383059700204981.html

以下是我自己的代码, C# + IE:

using Se = OpenQA.Selenium;
using SIE = OpenQA.Selenium.IE; //
SIE.InternetExplorerOptions _IEOptions = null;
SIE.InternetExplorerDriver _IEDriver = null; // init Internet driver
private void InitIE()
{ _IEOptions = new SIE.InternetExplorerOptions();
_IEOptions.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
_IEOptions.UnexpectedAlertBehavior = SIE.InternetExplorerUnexpectedAlertBehavior.Default;
_IEOptions.ElementScrollBehavior = SIE.InternetExplorerElementScrollBehavior.Bottom;
_IEDriver = new SIE.InternetExplorerDriver(_IEOptions);
} private void Scroll Bar()
{
IList<Se.IWebElement> frames = _IEDriver.FindElements(Se.By.TagName("frame"));
Se.IWebElement frameDisplay = null;
Se.IWebElement frameControlPanel = null;
foreach (var frame in frames)
{
if (frame.GetAttribute("name") == "ElementDisplayFrame")
{
frameDisplay = frame;
}
else if (frame.GetAttribute("name") == "ControlPanelFrame")
{
frameControlPanel = frame;
}
} if (frameDisplay != null)
{
_IEDriver.SwitchTo().Frame(frameDisplay); // scroll to bottom
Se.IWebElement ndaContainer = _IEDriver.FindElement(Se.By.Id("ndacontainer"));
string id = ndaContainer.GetAttribute("id");
var js = "var q = document.getElementById('" + id + "').scrollTop=10000";
_IEDriver.ExecuteScript(js, null);
ElementHP.Wait(_IEDriver);
Se.IWebElement yesButton = _IEDriver.FindElement(Se.By.XPath("//input[@name='I1']"));
if (yesButton != null && yesButton.Enabled)
{
yesButton.Click();
}
}
}

Selenium - IWebDriver 控制scroll bar到底部的更多相关文章

  1. [Selenium]Turn Page By Scroll Bar

    Description: Need to turn page by operating scroll bar and find out the element in the current page. ...

  2. VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)

    回顾上一节,鸡啄米讲的是组合框控件Combo Box的使用.本节详解滚动条控件Scroll Bar的相关内容. 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框 ...

  3. 用selenium 模块控制浏览器

    11.8 用selenium 模块控制浏览器selenium 模块让Python 直接控制浏览器,实际点击链接,填写登录信息,几乎就像是有一个人类用户在与页面交互.与Requests 和Beautif ...

  4. selenium模块控制浏览器

    利用selenium模块控制浏览器 导入selenium模块:from selenium import webdriver browserFirefox = webdriver.Firefox()#打 ...

  5. (七)对话框,单选框(radiobox),复选框(checkbox),列表框(ListBox),组合框(CComboBox),水平滚动条(Horizontal scroll bar),微调(旋转)spincontrol,列表视图控件CListCtrl,静态控件static

    1,模态对话框和非模态对话框 // 模态对话框 void CMainFrame::OnDialogExec() { // TODO: 在此添加命令处理程序代码 // 创建对话框对象 CDialog d ...

  6. NGUI多行输入框和滚动条结合使用(text list script 和scroll bar script)

    一,我们添加一个label,如下图:将label属性设置 二,给label添加一个box collider.然后在add component 添加test list,如下图: 三,添加一个脚本Test ...

  7. NGUI的滚动条的制作(scroll bar script)

    一,我们添加一个sprite,添加一个box collider,然后添加一个scroll bar script,我们来看看scroll bar script的属性 看到background和forgr ...

  8. VS2010-MFC(常用控件:滚动条控件Scroll Bar)

    转自:http://www.jizhuomi.com/software/191.html 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框和组合框设置了相应属性 ...

  9. Vue - 让水平滚动条(scroll bar)固定在浏览器的底部

    效果 踩坑经历 TLDR; 在几个小时的google和stack overflow的苦苦搜索后,无果. 经过自我思考,想到了一种实现方法: 整个页面是一个盒子,要出现滚动条,必然里面的元素要溢出.也即 ...

随机推荐

  1. 玩转linux文件(重点)

    一.几个主要的操作 mkdir—创建目录 cp—复制文件和目录 mv——移动/重命名文件和目录 rm——删除文件和目录 ln——创建硬链接和软链接 二.几个考点: 通配符 硬链接和软链接(符号链接) ...

  2. 为什么html5用的jQuery Mobile在手机浏览器/微信中打开字体很小

    头部加入 <header> <metaname="viewport"content="width=device-width, initial-scale ...

  3. 500 TypeError: Cannot read property 'connect.sid' of undefined

    1:在写passport验证测试用例时,发现有几个引用中间件顺序的错误,检查发现,passport验证写的是session,在传错误信息的时候req.flash调用也需要用到session中间件,否则 ...

  4. 转载 jQuery validation

    之前做客户端验证感觉自己javascript 不行,虽然能写出来一完整的验证,但从不自信,一直觉得客户端验证是比较繁琐的事情,但是又不能不做,只到最开始接触ajax ,遇到了一个jQuery vali ...

  5. GBK编码相关

    如上图.的GBK编码是A3AE, 那么·对应的无符号整数值应该是A*16**3+E*16**2+A+3, 无符号整数值所在地址的第一个自己是A3,第二个字节是AE

  6. mysql 忘记root密码修改方法

    先将mysql安装bin目录(例如:c:xxx\xxx\mysql\bin  加入环境变量) 1.在命令行窗口下输入net stop mysql5 或 net stop mysql 2.开一个命令行窗 ...

  7. centos 运用ssh的rsa算法实现无密码登录

    ssh 公钥和私钥原理 1.客户端机子生成私钥和公钥,将公钥放到服务器证书中,然后就可以实现免密码登录.(服务器认证文件要有该登录用户的读执行权限) 2.a登录b: a机子:test01账号(b也要建 ...

  8. POJ 1202 Family 概率,DP,高精 难度:2

    http://poj.org/problem?id=1202 难度集中在输出格式上,因为输出格式所以是高精度 递推式: 血缘肯定只有从双亲传到儿子的,所以,设f,m为双亲,son为儿子,p[i][j] ...

  9. POJ 3225 Help with Intervals

    U:把区间[l,r]覆盖成1I:把[0,l-1][r+1,∞]覆盖成0D:把区间[l,r]覆盖成0C:把[0,l-1][r+1,∞]覆盖成0 , 且[l,r]区间0/1互换(即异或)S:[l,r]区间 ...

  10. HTTP协议的chunked编码

    一般情况HTTP的Header包含Content-Length域来指明报文体的长度.如: 有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求 ...