如何使用Selenium WebDriver和Java滚动特定的DIV?

WebDriver无法识别某些WebElements,WebDriver无法找到浏览器可见区域中不可见的元素。

为了使WebDri可以通过WebDriver查看,我们需要在浏览器的视图中使该元素可见,以向下滚动特定的div!

如何在我的网页的特定区域执行操作(向下滚动并单击)。 我尝试了很多,没有帮助我。

请帮我解决我的问题。

向下滚动:

import org.openqa.selenium.JavascriptExecutor; WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("scroll(0, 250)"); //y value '250' can be altered 

向上滑动:

 JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("scroll(250, 0)"); //x value '250' can be altered 

滚动页面底部:

 JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));"); 

要么

 Actions actions = new Actions(driver); actions.keyDown(Keys.CONTROL).sendKeys(Keys.END).perform(); 

在慢动作中完全滚动到底部:

 for (int second = 0;; second++) { if(second >=60){ break; } ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,400)", ""); //y value '400' can be altered Thread.sleep(3000); } 

要么

 JavascriptExecutor jse = (JavascriptExecutor)driver; for (int second = 0;; second++) { if(second >=60){ break; } jse.executeScript("window.scrollBy(0,800)", ""); //y value '800' can be altered Thread.sleep(3000); } 

自动滚动到您的WebElement:

 Point hoverItem =driver.findElement(By.xpath("Value")).getLocation(); ((JavascriptExecutor)driver).executeScript("return window.title;"); Thread.sleep(6000); ((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+(hoverItem.getY())+");"); // Adjust your page view by making changes right over here (hoverItem.getY()-400) 

要么

 ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath("Value')]"))); 

要么

 WebElement element = driver.findElement(By.xpath("Value")); Coordinates coordinate = ((Locatable)element).getCoordinates(); coordinate.onPage(); coordinate.inViewPort(); 

首先,这里发布的大部分答案都不在此主题之内。 我现在一直在使用selenium 2和selenium 3,webdriver可以处理窗口滚动以使元素可见。

对于每个人发布片段,如:

 driver.execute_script('scrollBy(0, 250)') 

你根本得不到问题!

实际上我仍然没有找到一种方法来正确模拟滚动手柄的拖动动作,但这个答案似乎很有希望 – 但我没试过。

所以到目前为止,我个人有两种方法可以做到这一点:

  1. 使用Keys.ARROW_DOWN
  2. 使用Keys.PAGE_DOWN

实际上有第三种方式,只要放弃selenium并联系网站,如果他们提供任何API。

最简单的方法是执行Javascript以向上/向下滚动元素。

 JavascriptExecutor jsExec = (JavascriptExecutor) driver; jsExec.executeScript("document.getElementById('id').scrollDown += 100"); 
 driver.get("http://www.***.com/"); driver.manage().window().maximize(); WebElement scroll = driver.findElement(By.id("someId")); scroll.sendKeys(Keys.PAGE_DOWN); 

使用JavascriptExceutorscrollIntoView()方法执行此操作的另一种方法:

 WebElement DIVelement = driver.findElement(By.xpath("xpath to div")); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("arguments[0].scrollIntoView(true)". DIVelement); 

首先你应该滚动而不是找到元素,如下所示:

 document.getElementById("your div id").scrollTop(250); 

在上面你可以找到特定的div。

你也可以尝试下面:

  JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("javascript:window.scrollBy(250,350)"); 

考虑您的HTML如下所示:

 

这将帮助您向下滚动。 它是一个JavaScript执行器,所以你当然需要实现它。

我的“替代方法”是按元素的x和y坐标滚动到位置。 我还为y添加了一个偏移量,这样任何页眉/页脚或其他元素都不会阻止我想要滚动到的元素的可见性。

我在这个问题下贴了我的答案 –

Selenium webdriver无法单击页面外的链接

所有发布的答案都不适合我,但是我找到了基于这篇文章的解决方案。

 ((JavascriptExecutor) driver).executeScript( "arguments[0].scrollTop=arguments[1].offsetTop", divWithScrollbarElement, elementToScrollTo); 

其中divWithScrollbarElement是您要滚动的div元素, elementToScrollTo是您想要查看的子元素(在我的情况下实际上是我最初尝试查看的元素的父元素)。 如果elementToScrollTo实际上还没有在DOM中,您可能需要使用脚本一次尽可能向下滚动,然后再次加载元素。