StaleElementReferenceException

StaleElementReferenceException

我正在为鼠标悬停工作,我想通过使用for循环单击每个链接来测试所有链接的工作状态。在我的程序中,迭代进行一次,对于下一次迭代,它不起作用并显示“ StaleElementReferenceException” .....
如果需要,请在代码中进行修改。...

public static void main(String[] args) throws IOException
{
  WebDriver driver = new FirefoxDriver();
Autoit.Authenti(driver);
    driver.manage().window().maximize();

    driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);

   driver.get("http://staging.zenrays.com");


   Actions a1=new Actions(driver);
   WebElement cl=driver.findElement(By.xpath(".//*[@id='menu-450-2']/a"));
   a1.moveToElement(cl).perform();

   WebDriverWait wait =new WebDriverWait(driver, 30);



   List<WebElement> links=driver.findElements(By.xpath("//a[contains(@class,'sf-depth-2')]"));

           for(int i=0;i<=links.size()-1;i++)
           {

               links.get(i).click();

            driver.navigate().back();

               }
               }
          }

最佳答案

了解一件基本的事情:staleElementReferenceException,顾名思义,它表明对页面上元素的引用是陈旧的(丢失)。您仅需再次引用这些元素(如果可用),在这种情况下,由于页面已刷新,因此很适合。做两件事:


刷新页面后(当您向后浏览时),请使用明确的等待,直到可见您期望的元素
然后,重新引用您想再次使用的元素(您使用过的xpath定位器)
作为一种干净优雅的代码,在这些情况下使用try-catch块


我不会直接给您代码:)尝试一下,然后返回您的代码。

请参阅here
因为很清楚地解释了此特殊异常的可能情况

还有一件事:for循环给出IndexOutOfBoundsException。修改它

08-06 20:54