我正在点击网站dice.com上特定搜索的导航链接(标记为1,2,...下一步)
当我运行下面提到的代码时,它执行一次然后显示StaleElementReferenceException
请求您帮助解决此问题
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Ex2 {
public static void main(String[] args) {
WebDriver driver=new FirefoxDriver();
driver.get("http://dice.com");
driver.findElement(By.xpath("//input[@id='FREE_TEXT']")).sendKeys("Selenium");
driver. findElement(By.xpath("//*[@id='searchSubmit']")).click();
//block that has navigation links
WebElement b=driver.findElement(By.xpath("//*[@id='yui-main']/div/div[1]/div[1]/div[1][@class='pageProg']"));
//navigation links
List<WebElement> allLinks=b.findElements(By.tagName("a"));
System.out.println("Total links -->" + allLinks.size());
for(int i=0;i<allLinks.size();i++){
allLinks.get(i).click();
Thread.sleep(5000);
}
}
}
显示的错误是
线程“main”中的异常org.openqa.selenium.StaleElementReferenceException:在缓存中找不到元素 - 也许页面自查找以来已更改 命令持续时间或超时:59毫秒 有关此错误的文档,请访问:http://seleniumhq.org/exceptions/stale_element_reference.html 构建信息:版本:'2.35.0',修订版:'8df0c6b',时间:'2013-08-12 15:43:19' 系统信息:os.name:'Windows 8',os.arch:'amd64',os.version:'6.2',java.version:'1.7.0_11' 会议ID:0410f597-c149-46b5-a2b7-e84c61cc73f1
答案 0 :(得分:1)
问题是,当您单击第一个链接时,页面将重新加载,并且Selenium对该页面的引用将变为陈旧。我认为这种方法对你有用:
List<WebElement> allLinks=b.findElements(By.tagName("a"));
System.out.println("Total links -->" + allLinks.size());
String[] linkText = new String[allLinks.size()];
for(int i=0;i<allLinks.size();i++)
{
linkText[i] = allLinks.get(i).text;
}
for(int i=0;i<linkText.length;i++)
{
findElements(By.linktext(linkText).click();
Thread.sleep(5000);
}
答案 1 :(得分:0)
将此作为解决方法
try{
//Your code which causes exception
}
catch(org.openqa.selenium.StaleElementReferenceException e){
//Repeat the code in try
}
异常的原因是因为javascript已经再次使用相同的名称或id或其他任何内容加载了元素,并且您仍然指的是现在不存在的元素。