0

I'm trying to resolve a StaleElementReferenceException error in my selenium code. This is the error message i get:

org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document 

It occurs on this line:

String store = driver.findElement(By.xpath("//table[@class='table table-bordered table-hover']//tbody//tr["+r+"]//td[3]")).getText();

The other elements seem fine so not sure why it happens on this element.

Here is my complete code:

 package mypackage;

import java.time.Duration;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import io.github.bonigarcia.wdm.WebDriverManager;

public class DynamicWebTable {

    public static void main(String[] args) throws InterruptedException {
        WebDriverManager.chromedriver().setup();
        WebDriver driver = new ChromeDriver();
        
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
        
        driver.get("https://demo.opencart.com/admin/");
        driver.manage().window().maximize();
        
        
        WebElement username = driver.findElement(By.id("input-username"));
        username.clear();
        username.sendKeys("demo");
        
        WebElement password = driver.findElement(By.id("input-password"));
        password.clear();
        password.sendKeys("demo");
        
        driver.findElement(By.xpath("//button[normalize-space()='Login']")).click();
        
        //Close popup
        if(driver.findElement(By.xpath("//div[@class='modal-content']")).isDisplayed()) {
            driver.findElement(By.xpath("//button[@class='btn-close']")).click();
        }
        
        driver.findElement(By.xpath("//a[normalize-space()='Sales']")).click();
        driver.findElement(By.xpath("//a[normalize-space()='Orders']")).click();
        
        //get total no of pages
        String textWithTotalPages = driver.findElement(By.xpath("//div[@class='col-sm-6 text-end']")).getText();
        int pages = getNumberOfPages(textWithTotalPages);
        System.out.println(pages);
        
        //go through each page
        for(int p = 1; p < pages; p++) {
            System.out.println("Page no: "+p);
            
            //get number of rows
            int rows = driver.findElements(By.xpath("//table[@class='table table-bordered table-hover']//tbody/tr")).size();
            System.out.println("No of Rows: "+rows);
            
            //read rows from page
            for(int r=1; r<=rows; r++) {
                String orderId = driver.findElement(By.xpath("//table[@class='table table-bordered table-hover']//tbody//tr["+r+"]//td[2]")).getText();
                String store = driver.findElement(By.xpath("//table[@class='table table-bordered table-hover']//tbody//tr["+r+"]//td[3]")).getText();
                String customer = driver.findElement(By.xpath("//table[@class='table table-bordered table-hover']//tbody//tr["+r+"]//td[4]")).getText();
                String status = driver.findElement(By.xpath("//table[@class='table table-bordered table-hover']//tbody//tr["+r+"]//td[5]")).getText();
                
                System.out.println(orderId+ "  "+store+"  "+customer+"  "+status);
                
            }
            
            //click next page
            String nextPage = Integer.toString(p + 1);
//          try {
//              driver.findElement(By.xpath("//ul[@class='pagination']//li//a[text()='"+nextPage+"']")).click(); 
//          }catch(ElementClickInterceptedException e) {}
            
            JavascriptExecutor js= (JavascriptExecutor) driver;
            js.executeScript("window.scrollTo(0,document.body.scrollHeight)");
            Thread.sleep(2000);
            driver.findElement(By.xpath("//ul[@class='pagination']//li//a[text()='"+nextPage+"']")).click(); 
            
            System.out.println("Clicked page: "+nextPage);
            
                    
            
        }
        
        
        driver.quit();
    }
        
    //extract number of pages from String 
    public static int getNumberOfPages(String text){
        
        return Integer.valueOf(text.substring(text.indexOf("(")+1, text.indexOf("Pages")-1));
        
    }
        
}
fdama
  • 194
  • 3
  • 6
  • 15
  • I just answered you about this exception in my answer to your other question which you asked few minutes back. (https://stackoverflow.com/a/75257883/7598774) – Shawn Jan 27 '23 at 12:51

0 Answers0