有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助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. 在列表页,按照指定的category取所属的post列表

    在某些指定的页面,例如news,blog等页面,需要列出指定某种类型的文章列表,这种情况下,可以先添加两个category,分别命名news,blog,然后再分别添加几个post,指定每个post所属 ...

  2. NetworkComms网络通信框架V3结构图

    NetworkComms网络通信框架序言 来自英国的c#网络通信框架,历时五年打造,由英国剑桥的2位工程师倾情开发,最新版本V3.x版本.

  3. Struts+Spring+Hibernate整合入门详解

    Java 5.0 Struts 2.0.9 Spring 2.0.6 Hibernate 3.2.4 作者:  Liu Liu 转载请注明出处 基本概念和典型实用例子. 一.基本概念       St ...

  4. 搜索功能demo

    代码如下: <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edg ...

  5. [示例]NSDictionary编程题-字典的排序应用(iOS7班)

    代码: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepo ...

  6. ASP.NET MVC4 部分视图

    ASP.NET MVC4 部分视图 2014-10-24 16:48 by 易code, 2662 阅读, 1 评论, 收藏, 编辑 [部分视图] ASP.NET MVC 里的部分视图,相当于 Web ...

  7. Mongoose全面理解

    一.创建schemas 创建schemas的方式: 1 var userSchema = new mongoose.Schema({ 2 name: String, 3 email: String, ...

  8. 戴文的Linux内核专题:10配置内核(6)

    转自Linux中国 欢迎来到下一篇关于内核配置文章!还有大量的选项需要配置.这篇文章将主要讨论PCI和ACPI. 这里我们可以启用由ACPI控制的扩展坞和可移动驱动器槽的支持(Dock).记住,ACP ...

  9. error: unknown field 'ioctl' specified in initializer

    error message: 原因: 从2.6.36开始,file_operations结构发生了重大变化 具体看  xx../include/linux/fs.h定义: 取消了原先的 int (*i ...

  10. c#读写文本文档-1-用file类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...