前言:做Web自动化时,一般可利用Selenium定位页面元素进行如click,sendKeys类的操作。但也常遇到api没有调用错,却无法定位到元素,或者,无法进行操作。Fortunately,Selenium提供了操作JS的方法:execute_script(),可以直接执行js的脚本。常用的js汇总如下:
一. 控制滚动条高度
问题:需要定位的元素没有在当前页面显示,无法定位,需要上下滑动滚动条才可以看到
--scrollHeight 获取对象的滚动高度。
--scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离。
--scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离。
--scrollWidth 获取对象的滚动宽度。
#滚动到底部
js = "window.scrollTo(0,document.body.scrollHeight)"
#滚动到顶部
js = "window.scrollTo(0,0)"
#横向滚动
1.滚动条左右滚动(一般屏幕最大化后,很少出现此种情况)
2.通过坐标控制横向和纵向滚动条scrollTo(x, y)
js = "window.scrollTo(100,200);"
备注:scrollTo方法无浏览器兼容问题,可以通用,但其他的方法有兼容性区别,如:
1.针对chrome, js = "var q=document.body.scrollTop=0"
2.除chrome其他浏览器,js = "var q=document.documentElement.scrollTop=0"
二. 控制内嵌滚动条高度
问题:在内嵌网页或文本中有滚动条
上下左右滚动
js='document.getElementById("div_id").scrollTop=0’
js='document.getElementById("div_id").scrollTop=10000’
js='document.getElementById("div_id").scrollLeft=0
js='document.getElementById("div_id").scrollLeft=10000’
三.日历控件readonly属性
问题:日历控件存在readonly="readonly"时,无法用Sendkeys输入日期
1.方法:先删除readonly属性,再clear,然后输入
js = 'document.getElementById("date").removeAttribute("readonly");'
2.方法:用js方法输入日期
js2 = 'document.getElementById("date").value="2018-07-20"'
driver.execute_script(js2)
----如果js还是无法滑动滚动条的话,考虑用鼠标操作,ActionChains模拟鼠标的行为