我正在为鼠标悬停工作,我想通过使用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
。修改它