python+selenium+js 处理滚动条

 selenium并非万能的,有时候页面上操做没法实现的,这时候就须要借助JS来完成了。python

常见场景:web

当页面上的元素超过一屏后,想操做屏幕下方的元素,是不能直接定位到,会报元素不可见的。chrome

这时候须要借助滚动条来拖动屏幕,使被操做的元素显示在当前的屏幕上。编程

滚动条是没法直接用定位工具来定位的。selenium里面也没有直接的方法去控制滚动条,浏览器

这时候只能借助J了,还好selenium提供了一个操做js的方法:微信

execute_script(),能够直接执行js的脚本。app

 

1、JavaScript简介编程语言

1.JavaScript是世界上最流行的脚本语言,由于你在电脑、手机、平板上浏览的全部的网页,函数

以及无数基于HTML5的手机App,交互逻辑都是由JavaScript驱动的。简单地说,工具

JavaScript是一种运行在浏览器中的解释型的编程语言。

那么问题来了,为何咱们要学JavaScript?
2.有些特殊的操做selenium2+python没法直接完成的,JS恰好是这方面的强项,因此算是一个很

好的补充。对js不太熟悉的,能够网上找下教程,简单了解些便可。

http://www.w3school.com.cn/js/index.asp4

2、控制滚动条高度

1.滚动条回到顶部:

js="var q=document.getElementById(‘id‘).scrollTop=0"
driver.execute_script(js) 
2.滚动条拉到底部

js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)

3.这里能够修改scrollTop 的值,来定位右侧滚动条的位置,0是最上面,10000是最底部。

版权全部,微信公众号:软件测试部落

3、横向滚动条
1.有时候浏览器页面须要左右滚动(通常屏幕最大化后,左右滚动的状况已经不多见了)。
2.经过左边控制横向和纵向滚动条scrollTo(x, y)js = "window.scrollTo(100,400);"

driver.execute_script(js)

3.第一个参数x是横向距离,第二个参数y是纵向距离

4、Chrome浏览器

1.以上方法在Firefox上是能够的,可是用Chrome浏览器,发现无论用。
谷歌浏览器就是这么任性,不听话,因而用如下方法解决谷歌浏览器滚动条的问题。

2.Chrome浏览器解决办法:

js = "var q=document.body.scrollTop=0"
driver.execute_script(js)

 

5、元素聚焦
1.虽然用上面的方法能够解决拖动滚动条的位置问题,可是有时候没法肯定我须要操做的元素

在什么位置,有可能每次打开的页面不同,元素所在的位置也不同,怎么办呢?

2.这个时候咱们能够先让页面直接跳到元素出现的位置,而后就能够操做了。一样须要借助JS去实现。 
3.元素聚焦:

target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)

 

6、获取浏览器名称:driver.name

1.为了解决不一样浏览器操做方法不同的问题,能够写个函数去作兼容。

2.先用driver.name获取浏览器名称,而后用if语句作个判断

7、兼容性
1.兼容谷歌和firefox/IE

 

8、参考代码以下:# coding:utf-8from selenium import webdriverdriver = webdriver.Firefox()driver.get("https://www.baidu.com")print driver.name# 回到顶部def scroll_top():if driver.name == "chrome":js = "var q=document.body.scrollTop=0"else:js = "var q=document.documentElement.scrollTop=0"return driver.execute_script(js)# 拉到底部def scroll_foot():if driver.name == "chrome":js = "var q=document.body.scrollTop=10000"else:js = "var q=document.documentElement.scrollTop=10000"return driver.execute_script(js)# 聚焦元素target = driver.find_element_by_xxxx()driver.execute_script("arguments[0].scrollIntoView();", target)

相关文章
相关标签/搜索