1.1 JS处理滚动条
UI自动化中经常会遇到元素识别不到的问题,原因有很多,比如不在iframe里;有一种是在当前显示的页面元素不可见,需要进行拖动下拉条后才能通过selenium找到密码输入框的元素, selenium里面没有直接的方法去控制滚动条,selenium提供了一个操作js的方法:
execute_script(),可以直接执行js的脚本。
对js不太熟悉的,可以到以下网站学习了解:
http://www.runoob.com/js/js-tutorial.html
控制滚动条高度
滚动条回到顶部:
js="var q=document.documentElement.scrollTop=0"
driver.execute_script(js)
滚动条拉到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
可以修改scrollTop 的值来定位右侧滚动条的位置,以像素为单位来定垂直滚动条位置,0是最上面,10000是最底部。
# coding=utf-8 # JS操作滚动条 from selenium import webdriver import time driver = webdriver.Firefox() driver.maximize_window() driver.get("http://cd.58.com/") time.sleep(3) # 将页面滚动条拖到底部 js = "var q = document.documentElement.scrollTop = 100000" driver.execute_script(js) time.sleep(3) # 将滚动条移动到页面的顶部 js = "var q = document.documentElement.scrollTop = 0" driver.execute_script(js) time.sleep(3) # 将页面滚动条移动到页面任意位置,改变等于号后的数值即可 js = "var q = document.documentElement.scrollTop = 150" driver.execute_script(js) time.sleep(3) driver.quit()
PS:如果遇到内嵌滚动条还可以这样写:
js="var q=document.getElementById('id').scrollTop=0"
driver.execute_script(js)
document.getElementById('id')里的id为滚动条的id
还有一种比较常用的写法,就是将滚动条拖到指定元素处:
# coding=utf-8 # JS操作滚动条 from selenium import webdriver import time driver = webdriver.Firefox() driver.maximize_window() driver.get("http://cd.58.com/") time.sleep(3) # 将页面滚动条拖到指定元素处 target = driver.find_element_by_link_text("举报平台") driver.execute_script("arguments[0].scrollIntoView();", target)
除了上述方法,有时还可以曲线救国,使用键盘事件发送tap,down~~~~~~