I\'m trying to print first 5 pages links displayed in google search.. But getting StateElementReferenceException Not sure which one went wrong..
public
A couple of things:
printLinksName() for the first time it works.Generic List of type WebElement.for() loop you are clicking on the WebElement of Page 2 and then printing all the links by calling printLinksName().for() loop, the reference of List fiveLinks is lost as the DOM have changed. Hence, you see StaleElementReferenceException.A simple solution to avoid StaleElementReferenceException would be to move the line of code List with in the for() loop. So your code block will look like:
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Q44970712_stale
{
static WebDriver driver = null;
public static void main(String[] args) throws InterruptedException
{
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://www.google.co.in/");
//driver.findElement(By.xpath("//input[class='gsfi']")).sendKeys("Banduchode");;
WebElement search=driver.findElement(By.cssSelector("input#lst-ib"));
search.sendKeys("Banduchode");
search.sendKeys(Keys.ENTER);
printLinksName();
for(int i=0;i<5;i++)
{
List fiveLinks=driver.findElements(By.xpath(".//*[@id='nav']/tbody/tr/td/a"));
System.out.println(fiveLinks.get(i).getText());
fiveLinks.get(i).click();
Thread.sleep(5000);
printLinksName();
}
}
public static void printLinksName() throws InterruptedException
{
List allLinks=driver.findElements(By.xpath("//*[@id='rso']/div/div/div/div/div/h3/a"));
System.out.println(allLinks.size());
//print all list
for(int i=0;i
Note: In this simple solution when you finish printing the second page, next when you will create
ListthroughfiveLinks xpathwith.//*[@id='nav']/tbody/tr/td/afor second time,Page 1is the first element which gets stored in thefiveLinksList. Hence you may be again redirected toPage 1. To avoid that you may consider to take help ofxpathwith proper indexing.