相关疑难解决方法(0)

scrollIntoView vs moveToElement

在Selenium WebDriver中,将元素放入可见区域有两种主要方法:

  1. 滚动到视图中:

    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用moveToElement浏览器操作:

    Actions actions = new Actions(driver);
    actions.moveToElement(element);
    actions.perform();
    
    Run Code Online (Sandbox Code Playgroud)

这些方法是否相同,应该首选哪一种?

html javascript java selenium selenium-webdriver

32
推荐指数
1
解决办法
3万
查看次数

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

我正在开发一个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中轻松实现自动化吗?试图为此进行工作测试已经证明是艰巨的,我不确定在这一点上我还能尝试什么.

javascript python django selenium

6
推荐指数
0
解决办法
543
查看次数

标签 统计

javascript ×2

selenium ×2

django ×1

html ×1

java ×1

python ×1

selenium-webdriver ×1