在Selenium WebDriver中,将元素放入可见区域有两种主要方法:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Run Code Online (Sandbox Code Playgroud)Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();
Run Code Online (Sandbox Code Playgroud)这些方法是否相同,应该首选哪一种?
我正在开发一个Django项目,该项目利用Clusterize.js动态加载div中的"datapoints"列表.在Javascript/HTML方面,最初加载"blackbox"的前200个数据点.如果还有更多,则工作者一次开始加载1000个数据点,直到在滚动列表中获取并呈现所有数据点.当用户单击数据点时,将显示该数据点的详细信息.
最初,有一个错误会导致199以后的任何数据点出现错误的细节.一旦加载任何黑盒子的任何新数据点超过199,错误的数据点ID将传递给Javascript函数showDatapointDetail
,datapoint 200将获得详细信息对于数据点0,数据点201会得到详细为数据点1,等等,直到数据点1199将获取的数据点999的细节.然后数据点1200将获得0和模式将重复.我已经修复了Javascript代码中的这个错误,但现在我正在编写一个很好的测试,tests.py
以确保点击200以上的数据点获得正确的详细信息.该项目一直在使用Python selenium
进行大量的浏览器测试,现在我试图弄清楚如何使用它滚动到动态生成的div的底部.如果我这样做:
dp_detail_199 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "datapoint199")))
Run Code Online (Sandbox Code Playgroud)
然后我可以正确地获得该数据点细节,因为最初只加载了200个.但是,如果黑盒子有787个数据点,那么以下内容将不起作用:
dp_detail_750 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "datapoint750")))
Run Code Online (Sandbox Code Playgroud)
因为需要向下滚动才能开始加载下一个数据点.那么如何使用Selenium滚动到Clusterize生成的列表的底部?div被命名dp_pane
,我可以用Selenium找到它,但我不确定如何正确向下滚动,特别是向下滚动.我尝试过的一件事是首先向下滚动dp_pane
:
driver.execute_script("arguments[0].scrollTop = 12000", dp_pane)
Run Code Online (Sandbox Code Playgroud)
下到datapoint 200,然后向下滚动一点,找到数据点205:
while True:
dp_pane.send_keys(Keys.PAGE_DOWN)
try:
dp_detail_205 = driver.find_element_by_id("datapoint205")
except NoSuchElementException:
######## DEBUG OUTPUT #########
print "Couldn't find dp_detail_205"
continue
else:
######## DEBUG OUTPUT #########
print "Found it!"
break
Run Code Online (Sandbox Code Playgroud)
但这似乎陷入困境,从未找到数据点205; 相反,我只是继续获得调试输出"Couldn't find dp_detail_205"
.我应该怎么做才能让Selenium滚动到底部,dp_pane
以便我可以找到,例如,datapoint750
并验证它是否具有正确的详细信息?最终,我需要的是Selenium让Clusterize加载更多的行,因为这是我需要的一件事,这个测试工作根本没用.甚至Clusterize自己的编程滚动方法也不起作用; 我将使用的行将是这样的:
document.getElementById('dp_pane').scrollTop = 12000;
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,无论我使用scrollTop值多大,它都只能达到数据点199的最低值,并且不会自动加载更多的行.
编辑:
我最近将项目升级到Django 1.9,其中包括与QUnit的集成.乍一看,我认为这是测试Selenium的理想替代品.但是,现在我在阅读一些文件后不确定; 首先,测试涉及首先上传.dat文件,我不确定QUnit可以用于.此外,它可以在Travis CI中轻松实现自动化吗?试图为此进行工作测试已经证明是艰巨的,我不确定在这一点上我还能尝试什么.