I have written the following code in Selenium 1 (a.k.a Selenium RC) for page scrolling using java:
selenium.getEval("scrollBy(0, 250)");
What is the equivalent code in Selenium 2 (WebDriver)?
I have written the following code in Selenium 1 (a.k.a Selenium RC) for page scrolling using java:
selenium.getEval("scrollBy(0, 250)");
What is the equivalent code in Selenium 2 (WebDriver)?
Scenario/Test steps:
For Scroll down:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)");
OR, you can do as follows:
jse.executeScript("scroll(0, 250);");
For Scroll up:
jse.executeScript("window.scrollBy(0,-250)");
OR,
jse.executeScript("scroll(0, -250);");
Scroll to the bottom of the page:
Scenario/Test steps:
Way 1: By using JavaScriptExecutor
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");
Way 2: By pressing ctrl+end
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL, Keys.END);
Way 3: By using Java Robot class
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_END);
robot.keyRelease(KeyEvent.VK_END);
robot.keyRelease(KeyEvent.VK_CONTROL);
scroll(0,-250)
–
Sera Scrolling to the bottom of a page:
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
There are many ways to scroll up and down in Selenium Webdriver I always use Java Script to do the same.
Below is the code which always works for me if I want to scroll up or down
// This will scroll page 400 pixel vertical
((JavascriptExecutor)driver).executeScript("scroll(0,400)");
You can get full code from here Scroll Page in Selenium
If you want to scroll for a element then below piece of code will work for you.
je.executeScript("arguments[0].scrollIntoView(true);",element);
You will get the full doc here Scroll for specific Element
This may not be an exact answer to your question (in terms of WebDriver), but I've found that the java.awt
library is more stable than selenium.Keys
.
So, a page down action using the former will be:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
JavascriptExecutor js = ((JavascriptExecutor) driver);
Scroll down:
js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
Scroll up:
js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");
Try this:
Actions dragger = new Actions(driver);
WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("//*[@id='jobreslist_outercontainer']/div/div[2]/div"));
// drag downwards
int numberOfPixelsToDragTheScrollbarDown = 50;
for (int i = 10; i < 500; i += numberOfPixelsToDragTheScrollbarDown) {
try {
// this causes a gradual drag of the scroll bar, 10 units at a time
dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0, numberOfPixelsToDragTheScrollbarDown).release().perform();
Thread.sleep(1000L);
} catch(Exception e1) {}
}
// now drag opposite way (downwards)
numberOfPixelsToDragTheScrollbarDown = -50;
for (int i = 500; i > 10; i += numberOfPixelsToDragTheScrollbarDown) {
// this causes a gradual drag of the scroll bar, -10 units at a time
dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0, numberOfPixelsToDragTheScrollbarDown).release().perform();
Thread.sleep(1000L);
}
We can scroll to a specific element:
const element = await driver.findElement(...)
await driver.executeScript("arguments[0].scrollIntoView(true);", element)
await driver.sleep(500);
You should add a scroll to the page to select all elements using:
Selenium.executeScript("window.scrollBy(0,450)", "");
If you have a large list, add the scroll several times through the execution. Note the scroll only go to a certain point in the page for example (0, 450)
.
I did not want to use JavaScript, or any external libraries, so this was my solution (C#):
IWebElement body = Driver.FindElement(By.TagName("body"));
IAction scrollDown = new Actions(Driver)
.MoveToElement(body, body.Size.Width - 10, 15) // position mouse over scrollbar
.ClickAndHold()
.MoveByOffset(0, 50) // scroll down
.Release()
.Build();
scrollDown.Perform();
You can also easily make this an extension method for scrolling up or down on any element.
1.To scroll page to the bottom use window.scrollTo(0,document.body.scrollHeight) as parameter
//Code to navigate to bottom
WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollHeight));
2.To scroll page to the top use window.scrollTo(0,document.body.scrollTop) as parameter
//Code to navigate to top
WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollTop));
3.To scroll page to the Left use window.scrollTo(0,document.body.scrollLeft) as parameter
//Code to navigate to left
WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollLeft));
4.To scroll to certain point window.scrollTo(0,500) as parameter
//Code to navigate to certain point e.g. 500 is passed as value here
WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,500));
To check the navigation directly in browser , open developers tool in browser and navigate to console. Execute the command on console window.scrollTo(0,400)
JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");
This code works for me. As the page which I'm testing, loads as we scroll down.
Javascript executor always does the job perfectly:
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
where (0,300)
are the horizontal and vertical distances respectively. Put your distances as per your requirements.
If you a perfectionist and like to get the exact distance you like to scroll up to on the first attempt, use this tool, MeasureIt. It's a brilliant firefox add-on.
Thanks for Ripon Al Wasim's answer. I did some improvement. because of network problems, I retry three times until break loop.
driver.get(url)
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
try_times = 0
while True:
# Scroll down to bottom
driver.execute_script("window.scrollBy(0,2000)")
# Wait to load page
time.sleep(scroll_delay)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if last_height == new_height:
try_times += 1
if try_times > 3:
try_times = 0
break
last_height = new_height
JavascriptExecutor is best to scroll down a web page
window.scrollTo
Function in JavascriptExecutor can do this
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0,100");
Above code will scroll down by 100 y coordinates
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)");
If you want to scroll the page vertically to perform some action, you can do it using the following JavaScript. ((JavascriptExecutor)driver).executeScript(“window.scrollTo(0, document.body.scrollHeight)”);
Where ‘JavascriptExecutor’ is an interface, which helps executing JavaScript through Selenium WebDriver. You can use the following code to import.
import org.openqa.selenium.JavascriptExecutor;
2.If you want to scroll at a particular element, you need to use the following JavaScript.
WebElement element = driver.findElement(By.xpath(“//input [@id=’email’]”));((JavascriptExecutor) driver).executeScript(“arguments[0].scrollIntoView();”, element);
Where ‘element’ is the locator where you want to scroll.
3.If you want to scroll at a particular coordinate, use the following JavaScript.
((JavascriptExecutor)driver).executeScript(“window.scrollBy(200,300)”);
Where ‘200,300’ are the coordinates.
4.If you want to scroll up in a vertical direction, you can use the following JavaScript. ((JavascriptExecutor) driver).executeScript(“window.scrollTo(document.body.scrollHeight,0)”);
If you want to scroll horizontally in the right direction, use the following JavaScript. ((JavascriptExecutor)driver).executeScript(“window.scrollBy(2000,0)”);
If you want to scroll horizontally in the left direction, use the following JavaScript. ((JavascriptExecutor)driver).executeScript(“window.scrollBy(-2000,0)”);
© 2022 - 2024 — McMap. All rights reserved.