[Selenium]Turn Page By Scroll Bar
Description:
Need to turn page by operating scroll bar and find out the element in the current page.
Previous page will not exist in DOM structure when turning page.
Solution:
- Get the total height, button height, scroll bar height
- Calculate total move height, totalMoveHeight = totalHeight - 2*buttonHeight - scrollbarHeight
- Calculate page number, pageNum = totalMoveHeight/scrollbarHeight
- Calculate the last page when it is less then a whole page, lessThenOnePageHeight = totalMoveHeight%scrollbarHeight
- Turn page according to the page number and lessThenOnePageHeight
Code:
/**************************Report Portal–>ReportProductionFlow.java******************************/
public void seleteTemplate_NotClassifiedFactsheet(String template){
        //Scroll the scroll bar page by page
        Actions actions = new Actions(page.getDriver());
        int totalHeight = page.getDiv_scrollbar_TemplateMappingSetting().getSize().getHeight();
        int buttonHeight = page.getButton_ScrollbarDown().getSize().getHeight();
        int scrollbarHeight = page.getScrollbar_TemplateMappingSetting().getSize().getHeight();
        int totalMoveHeight = totalHeight - buttonHeight - buttonHeight - scrollbarHeight;
        int pageNum = totalMoveHeight/scrollbarHeight;
        int lessThenOnePageHeight = totalMoveHeight%scrollbarHeight;
        if(lessThenOnePageHeight>0){
            pageNum+=1;
        }
        for(int i=0;i<pageNum;i++){
            if ((i==(pageNum-1))&&(lessThenOnePageHeight>0)) {
                scrollbarHeight=lessThenOnePageHeight;
            }
            actions.dragAndDropBy(page.getScrollbar_TemplateMappingSetting(), 0, scrollbarHeight).perform();
            SeleniumUtil.sleep(1);
            List <WebElement> groupList = page.getGroupListInTemplateMapping();
            int groupNum = groupList.size();
            for(int j=0;j<groupNum;j++){
                WebElement groupEl=groupList.get(j);
                String groupName = groupEl.getText();
                if(groupName.equals("Not Classified")){
                    System.out.println("Find Group : "+groupName+" in page "+i);
                    WebElement factsheetTemplateEl=page.getDDL_NotClassifiedFactsheet();
                    factsheetTemplateEl.click();
                    page.getLink_Template(template).click();
                }
            }
        }
    }
/**************************Report Portal–>ReportProductionFlow.java******************************/
/**************************Report Portal–>ReportProductionPage.java******************************/
public WebElement getDiv_scrollbar_TemplateMappingSetting(){
        return SeleniumUtil.waitForElementPresent(driver, By.cssSelector("div#uidialog7.uidialog div.uidialogcontent div#mapEditDlgDiv div.tempmapsetup div.itemsgrid div.rtq-grid div.rtq-grid-sz div.rtq-scrollpanel div.rtq-scrollbar.rtq-scrollbar-y"));
}
public WebElement getButton_ScrollbarDown(){
        return SeleniumUtil.waitForElementPresent(driver, By.cssSelector("div#uidialog7.uidialog div.uidialogcontent div#mapEditDlgDiv div.tempmapsetup div.itemsgrid div.rtq-grid div.rtq-grid-sz div.rtq-scrollpanel div.rtq-scrollbar.rtq-scrollbar-y a.rtq-scrollbar-down"));
}   
public WebElement getScrollbar_TemplateMappingSetting(){
        return SeleniumUtil.waitForElementPresent(driver, By.cssSelector("div#uidialog7.uidialog div.uidialogcontent div#mapEditDlgDiv div.tempmapsetup div.itemsgrid div.rtq-grid div.rtq-grid-sz div.rtq-scrollpanel div.rtq-scrollbar.rtq-scrollbar-y div.rtq-scrollbar-bar"));
 }
/**************************Report Portal–>ReportProductionFlow.java******************************/
[Selenium]Turn Page By Scroll Bar的更多相关文章
- Selenium - IWebDriver 控制scroll bar到底部
		有时候我们需要控制页面滚动条上的滚动条,但滚动条并非页面上的元素,这个时候就需要借助js是来进行操作.一般用到操作滚动条的会两个场景: 注册时的法律条文需要阅读,判断用户是否阅读的标准是:滚动条是否拉 ... 
- 浅析selenium的page object模式
		selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好 ... 
- VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)
		回顾上一节,鸡啄米讲的是组合框控件Combo Box的使用.本节详解滚动条控件Scroll Bar的相关内容. 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框 ... 
- (七)对话框,单选框(radiobox),复选框(checkbox),列表框(ListBox),组合框(CComboBox),水平滚动条(Horizontal scroll bar),微调(旋转)spincontrol,列表视图控件CListCtrl,静态控件static
		1,模态对话框和非模态对话框 // 模态对话框 void CMainFrame::OnDialogExec() { // TODO: 在此添加命令处理程序代码 // 创建对话框对象 CDialog d ... 
- NGUI多行输入框和滚动条结合使用(text list script 和scroll bar script)
		一,我们添加一个label,如下图:将label属性设置 二,给label添加一个box collider.然后在add component 添加test list,如下图: 三,添加一个脚本Test ... 
- NGUI的滚动条的制作(scroll bar script)
		一,我们添加一个sprite,添加一个box collider,然后添加一个scroll bar script,我们来看看scroll bar script的属性 看到background和forgr ... 
- VS2010-MFC(常用控件:滚动条控件Scroll Bar)
		转自:http://www.jizhuomi.com/software/191.html 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框和组合框设置了相应属性 ... 
- Python+Selenium使用Page Object实现页面自动化测试
		Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ... 
- Selenium关于Page Objects
		介绍页面对象设计模式.一个页面对象表示在你测试的web页面用户交互的界面. 使用页面对象模式的有点: 创建可重用的代码可以在多个测试用例中使用 减少重复的代码量 如果用户界面改变,只需要修改一个地方 ... 
随机推荐
- centos7 开放mongodb端口
			CentOS 7 默认没有使用iptables,所以通过编辑iptables的配置文件来开启端口是不可以的 CentOS 7 采用了 firewalld 防火墙 如要查询是否开启27019端口则: 1 ... 
- sysstat工具
			sysstat工具可以监控系统的IO,CPU,SWAP,LOAD,NETWORK,DISK 安装后,系统会生成定时任务脚本 路径:/etc/cron.d/sysstat 内容: # Run syste ... 
- emacs之配置yasnippet
			~/emacsConfig/auto-complete-yasnippet-setting.el (require 'yasnippet) (setq ac-sources (append '(ac- ... 
- 智能家居入门DIY——【六、使用OneNet后台处理数据】
			OneNet使用起来要比lewei50复杂一些,它没有前台需要自己开发.命令下发也和之前介绍的lewei50有一些区别,这里着重介绍一下使用MQTT协议来进行通讯. 一.准备 1.Esp8266开发板 ... 
- JAVA面向对象编程课程设计——web版斗地主
			一.团队课程设计博客链接 JAVA面向对象编程课程设计--网络版单机斗地主 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记 ... 
- java Long
			1. Long.valueOf(b) 返回的是对象 public static Long valueOf(String s) throws NumberFormatException { )); } ... 
- mysql 统计一个列不同值的数量
			SELECT count(status = 0 OR NULL) AS a, count(status = 1 OR NULL) AS b, count(status = 2 OR NULL) AS ... 
- pythonNet day03
			TCP应用之 httpserver 1.接收http请求 2.查看http请求 3.返回一个网页给客户端 # 做的是一个本地服务端,接收来自浏览器客户端的请求 from socket import * ... 
- Mysql 授权远程访问
			1.表示从任何主机连接到mysql服务器 GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT O ... 
- Linux(Centos)安装配置SVN服务器
			1. 安装SVN服务器: 检查是否已安装 # rpm -qa subversion 安装SVN服务器 # yum install httpd httpd-devel subversion mod_da ... 
