2015-09-15 55 views
0

我在JavaScript中创建了一些Selenium测试。点击不在视图中的按钮时遇到问题(这似乎是Chrome驱动程序的问题)。解决此问题的方法很简单,只是scrolling to the element,但是所示的示例是使用Java而不是JavaScript。基于java的解决方案,我尝试了以下没有成功:使用JavaScript在Selenium上使用JavaScript滚动到网页元素

var element = driver.findElement(webdriver.By.id('next_button')); 
    var location = element.getLocation(); 
    var window = new webdriver.Window(driver); 
    window.scrollBy(location); 

我不认为我在这里使用正确类型的窗口对象。如何使用JavaScript向下滚动到元素?

+0

[How to go to a specific element on page?](http://stackoverflow.com/questions/4801655/how-to-go-to-a-specific-element-on-page) – JeffC

+0

看看这个答案,http://stackoverflow.com/a/14732703/2386774。它是JavaScript。 – JeffC

回答

1

getLocation()函数以对象的形式返回位置。而且,window.scrollBy()是一个DOM javascript函数,所以你不可能在不执行它的情况下在selenium中使用它。另外window.scrollBy()在DOM中滚动特定数量的像素,而使用滚动到特定位置的window.scrollTo()。以下是你如何做到这一点 -

driver.wait(function(){ 
driver.findElement(By.id('next_button'), function(ele){ 
    ele.getLocation().then(function(loc){ 
     driver.executeScript('return window.scrollTo('+loc.x+','+loc.y+');') 
     .then(function(){ 
      ele.click(); 
     }); 
    }); 
}); 
},10000); 

希望这会有所帮助。

+0

感谢您的回答。我必须用'.then'链接'findElement'和'getLocation',以便使它正确同步。不幸的是,页面没有滚动,我在'next_button'上看到同样的错误不可见。你的例子中的'browser'对象是一个普通的chrome驱动程序对象吗? – EJS

+0

感谢您的更新。在代码中点击之前,我已经在线上放了一个睡眠,但是仍然看不到任何滚动,并且我仍然在点击时看到相同的错误消息。 – EJS

+0

你可以控制'loc'变量并查看它是否返回具有任何有效值的对象?也等待元素加载将帮助我想,如果它不在DOM已经。谢谢 –

相关问题