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

2024-09-30 05:19:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个Django项目Clusterize.js为了动态加载div中的“datapoints”列表,在Javascript/HTML端,最初加载“blackbox”的前200个数据点。如果有更多的数据点,那么一个worker开始一次加载1000个数据点,直到所有的数据点都被获取并呈现在滚动列表中。当用户单击某个数据点时,会显示该数据点的详细信息。在

最初,有一个bug会为199年以后的任何数据点提供错误的详细信息。一旦加载任何blackbox的超过199的新数据点,错误的数据点ID将被传递给Javascript函数showDatapointDetail,datapoint 200将获得数据点0的详细信息,datapoint 201将获取数据点1的详细信息,依此类推,直到datapoint 1199获得数据点999的详细信息。然后datapoint1200将得到0,模式将重复。我已经在Javascript代码中修复了这个错误,但是现在我正在写一个好的测试,以确保点击超过200的数据点得到正确的细节。这个项目一直在使用Pythonselenium进行许多浏览器测试,现在我正试图找出如何使用它滚动到动态生成的div的底部。如果我喜欢:

dp_detail_199 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "datapoint199")))

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

^{pr2}$

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

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

要进入数据点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的值设得多大,它只会低到datapoint199,并且不会自动加载更多的行。在

编辑:

我最近将这个项目升级到django1.9,其中包括与QUnit的集成。乍一看,我认为它是硒的理想替代品。但是,在阅读了一些文档之后,我现在不确定;首先,测试需要先上载一个.dat文件,我不确定QUnit是否可以用于此目的。另外,在Travis CI中可以很容易地实现自动化吗?尝试做一个工作测试已经被证明是艰巨的,我不确定我可以在这一点上尝试更多。在


Tags: 数据项目div列表driverselenium错误详细信息

热门问题