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

pan*_*raj 28 java selenium selenium-webdriver

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

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

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

请帮我解决我的问题.

Jun*_* Gu 10

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

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

driver.execute_script('scrollBy(0, 250)')
Run Code Online (Sandbox Code Playgroud)

你根本得不到问题!

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

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

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

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


Rup*_*nde 6

向下滚动:

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

向上滑动:

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

滚动页面底部:

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

要么

Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.END).perform();
Run Code Online (Sandbox Code Playgroud)

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

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);
}
Run Code Online (Sandbox Code Playgroud)

要么

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);
}
Run Code Online (Sandbox Code Playgroud)

自动滚动到您的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)
Run Code Online (Sandbox Code Playgroud)

要么

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath("Value')]")));
Run Code Online (Sandbox Code Playgroud)

要么

WebElement element = driver.findElement(By.xpath("Value"));
Coordinates coordinate = ((Locatable)element).getCoordinates(); 
coordinate.onPage(); 
coordinate.inViewPort();
Run Code Online (Sandbox Code Playgroud)

  • 这只是与滚动相关的每个示例的复制粘贴工作,其中大多数与问题完全无关.问题是关于滚动特定的`div`而不是滚动窗口本身. (35认同)
  • @Rupesh Shinde:你确定你真的明白了问的问题吗?作者询问如何在特定div中滚动内容,你只是在这里复制了如何滚动主窗口内容的所有可能方法,这些内容并没有真正帮助. (6认同)

Mar*_*ier 6

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

JavascriptExecutor jsExec = (JavascriptExecutor) driver;
jsExec.executeScript("document.getElementById('id').scrollDown += 100");
Run Code Online (Sandbox Code Playgroud)

  • 您指的是“scrollTop”而不是“scrollDown”吗?(目前正在使用 chrome) (2认同)

Pav*_*nko 5

driver.get("http://www.***.com/");
driver.manage().window().maximize();
WebElement scroll = driver.findElement(By.id("someId"));
scroll.sendKeys(Keys.PAGE_DOWN);
Run Code Online (Sandbox Code Playgroud)


Hel*_*nds 2

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

document.getElementById("your div id").scrollTop(250);
Run Code Online (Sandbox Code Playgroud)

经过上面的操作你就可以找到那个特定的div了。

您还可以尝试以下操作:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("javascript:window.scrollBy(250,350)");
Run Code Online (Sandbox Code Playgroud)