0

我正在单击导航链接(标记为 1,2,...下一步)以在网站 dice.com 中进行特定搜索

当我运行下面提到的代码时,它会执行一次,然后显示 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

4

2 回答 2

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);
}
于 2013-10-03T07:00:51.983 回答
0

将此用作解决方法

try{
//Your code which causes exception

}
catch(org.openqa.selenium.StaleElementReferenceException e){
//Repeat the code in try
}

异常的原因是因为 javascript 已经再次加载了具有相同名称或 id 或其他任何内容的元素,而您仍然指的是现在不存在的元素。

于 2013-10-03T06:53:14.030 回答