Test admin
Test admin

Reputation: 731

Element not found in cache - perhaps the page has changed since it has looked up

I'm testing a web app, in which after opening a page I need to select a radio button after that a pop-up will appear. In that pop-up I'm selecting an ID. Once selected, it will come to main window, in which I'm trying to select a text field with ID. But I receive the following error:

Element not found in the cache - perhaps the page has changed since it was looked up Command duration or timeout: 50.14 seconds

  driver.findElement(By.xpath("html/body/section/div/div[2]/div[3]/div/div/div/div/ul/li[1]/a")).click();
    driver.findElement(By.xpath("html/body/section/div/div[12]/div[1]/div/div[2]/div[3]/div/div/div/div/button[1]")).click();
    driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    String mainWindowHandle=driver.getWindowHandle();
    driver.findElement(By.xpath("html/body/div[3]/div/div")).click();
    driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    Set s = driver.getWindowHandles();
    Iterator ite = s.iterator();
    while(ite.hasNext())
    {
         String popupHandle=ite.next().toString();
         if(!popupHandle.contains(mainWindowHandle))
         {
               driver.switchTo().window(popupHandle);
         }
    }
    driver.findElement(By.xpath("html/body/div[3]/div/div/div[3]/div/div/div[1]/div[2]/div[4]/div[2]/a")).click();
    driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
    driver.switchTo().window( mainWindowHandle );
    driver.findElement(By.id("Title")).sendKeys("auto title");

Problem is I cannot find the textfield with ID: Title" for inserting "auto title.

Thanks in Advance.

Upvotes: 0

Views: 5737

Answers (2)

alecxe
alecxe

Reputation: 474041

Instead of using sleep() with hardcoded time intervals, use an explicit wait:

WebDriverWait wait = new WebDriverWait(driver, 30);

WebElement title = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Title")));
title.sendKeys("auto title");

Upvotes: 3

Test admin
Test admin

Reputation: 731

Finally found a solution by adding

Thread.sleep(5000);

before finding the element and it solved.

Upvotes: 1

Related Questions