Python Selenium滚动到Clusterize生成的div的底部

时间:2016-02-01 21:28:20

标签: javascript python django selenium

我正在开发一个Django项目,该项目利用Clusterize.js在div中动态加载“datapoints”列表。在Javascript / HTML方面,最初加载“blackbox”的前200个数据点。如果还有更多,则工作者一次开始加载1000个数据点,直到在滚动列表中获取并呈现所有数据点。当用户单击数据点时,将显示该数据点的详细信息。

最初,有一个错误会导致199以后的任何数据点出现错误的细节。一旦加载任何blackbox的新数据点超过199,错误的数据点ID将被传递给Javascript函数showDatapointDetail ,数据点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")))

然后我可以正确获得该数据点细节,因为最初只加载了200个。但是,如果黑盒子有787个数据点,那么以下内容将不起作用:

dp_detail_750 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "datapoint750")))

因为需要向下滚动才能开始加载下一个数据点。那么如何使用Selenium滚动到Clusterize生成的列表的底部? div命名为dp_pane,我可以用Selenium找到它,但我不确定如何正确向下滚动,特别是向下滚动。我尝试过的一件事是首先向下滚动dp_pane

driver.execute_script("arguments[0].scrollTop = 12000", dp_pane)

下到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

但这似乎陷入困境,从未找到数据点205;相反,我只是继续得到"Couldn't find dp_detail_205"的调试输出。我该怎么办才能让Selenium滚动到dp_pane的底部,以便我可以找到datapoint750并验证它是否具有正确的详细信息?最终,我需要的是Selenium让Clusterize加载更多的行,因为这是我需要的一件事,这个测试工作根本没用。甚至Clusterize自己的编程滚动方法也不起作用;我将使用的行将是:

document.getElementById('dp_pane').scrollTop = 12000;

但不幸的是,无论我使用scrollTop值多大,它都只能达到datapoint 199的最低值,并且不会自动加载更多的行。

编辑:

我最近将项目升级到Django 1.9,其中包括与QUnit的集成。乍一看,我认为这是测试Selenium的理想替代品。但是,现在我在阅读一些文件后不确定;首先,测试涉及首先上传.dat文件,我不确定QUnit可以用于。此外,它可以在Travis CI中轻松实现自动化吗?试图为此进行工作测试已经证明是艰巨的,我不确定在这一点上我还能尝试什么。

0 个答案:

没有答案