循环链接列表(在主页上返回)

时间:2016-01-28 17:31:23

标签: java selenium

我的目标是点击列表中的每个链接,从新打开的页面(包含表格)中获取特定文本,然后返回上一页(包含所有链接的主页面),打开第二个链接等等... 因为我在Java selenium中相对较新我现在不知道如何返回主 页面并继续循环(从第一个打开的页面收集信息之后) )。

我尝试使用此代码但发生此错误:线程中的异常" main" org.openqa.selenium.StaleElementReferenceException:在缓存中找不到元素 - 也许页面自查找以来已更改 命令持续时间或超时:10.04秒

     package expofair;

     import java.util.Iterator;
     import java.util.List;
     import java.util.concurrent.TimeUnit;

     import org.openqa.selenium.By;
     import org.openqa.selenium.WebDriver;
     import org.openqa.selenium.WebElement;
     import org.openqa.selenium.firefox.FirefoxDriver;

     public class exponull {

     public static void main(String[] args) throws InterruptedException {

     WebDriver driver = new FirefoxDriver();
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

           // go to main page

    driver.get(mainpage);
    Thread.sleep(2000);
    driver.manage().window().maximize();

            // list of all links     

    List<WebElement> lista1 = driver.findElements(By.cssSelector(".tl.nobr>a"));
    Iterator<WebElement> iter = lista1.iterator();

    while(iter.hasNext()) {
    WebElement we = iter.next();
    we.click();
        String S1 = driver.findElement(By.cssSelector("#nm-date")).getText();
        System.out.println(S1);
    }


    }
    }  

1 个答案:

答案 0 :(得分:0)

当您通过转到另一个页面甚至刷新DOM来更改DOM时,驱动程序会释放它所具有的WebElements并查看新元素,即使页面完全相同。导致StaleElementReferenceException

的原因

每次迭代都需要重新找到元素:

List<WebElement> lista1 = null;
int size = 1;

for (int i = 0 ; i < size ; ++i) {
    lista1 = driver.findElements(By.cssSelector(".tl.nobr > a")); //locate all the links
    size = lista1.size(); //change the loop itreations number to the right one
    lista1.get(i).click(); //click on the link
    System.out.println(Sdriver.findElement(By.id("nm-date")).getText()); //print the data
    driver.navigate().back(); //go to previous page
}