selenium:线程“main”中的异常org.openqa.selenium.StaleElementReferenceException:

时间:2013-10-03 01:14:52

标签: selenium

我正在点击网站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

2 个答案:

答案 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或其他任何内容加载了元素,并且您仍然指的是现在不存在的元素。