senium做自动化测试的过程中,有的页面需要下拉滚动条才能全部加载完成,否则加载不出来就定位不到想要的元素。
参考链接:http://www.cnblogs.com/landhu/p/5761794.html
摘抄如下:
在python中有几种方法解决这种问题,简单介绍下,给需要的人:
方法一)使用js脚本直接操作,方法如下:
js="var q=document.getElementById('id').scrollTop=10000"
driver.execute_script(js)
或:
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
这里的id为滚动条的id,但js中没有xpath的方法,所以滚动条没有id的网页此方法不适用
方法二)使用js脚本拖动到指定地方
target = driver.find_element_by_id("id_keypair")
driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
这个方法可以将滚动条拖动到需要显示的元素位置,此方法用途比较广,可以使用
L = driver.find_elements_by_xpath('/html/body/div/div/div/ul/li/span')
print(len(L))
for i in L:
if i.text != "测试23":
continue
else:
sleep(2)
driver.execute_script("arguments[0].scrollIntoView();", i)
i.click()
break
#这个方法我使用成功了,就是方法二
方法三)根据页面显示进行变通,发送tab键
在本例中的页面中,密码是输入框,正常手工操作时,可以通过tab键会切换到密码框中,所以根据此思路,在python中也可以发送tab键来切换,使元素显示
from selenium.webdriver.common.keys import Keys
driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)
方法四:
Window.scrollTo()方法
scrollTo(xpos,ypos)
此方法可以把滚动条拖动到指定的坐标,其中xpos是横坐标,也就是对横滚动条进行操作;ypos是纵坐标,也就是对竖进度条进行操作
那么我们怎么能知道元素所在位置的坐标呢?先来介绍一个Chrome浏览器的插件: page ruler
安装插件后,打开谷歌浏览器,可以再右上角看到一把尺子的图标,点击尺子的图标,移动到元素的位置,就可以显示这个元素的坐标了,如图:
# coding = utf-8
from selenium import webdriver
from time import sleep
# 驱动文件路径
driverfile_path = r‘D:\coship\Test_Framework\drivers\chromedriver.exe‘
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
driver.get(r‘https://www.autoitscript.com/site/autoit/downloads/‘)
driver.maximize_window()
driver.implicitly_wait(20)
# 调用JS代码拖动滚动条
driver.execute_script("window.scrollTo(0,1680)")
# 直接拖动到底部
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
# 拖动到顶部
driver.execute_script("window.scrollTo(0,0)")
# 退出
sleep(5)
driver.quit()