执行代码下方时出现“元素不再有效”错误

时间:2015-08-12 18:18:16

标签: java selenium

我是Selenium的新手。获得

  

org.openqa.selenium.StaleElementReferenceException:元素不再有效(警告:服务器未提供任何堆栈跟踪信息)

运行以下代码时出现

错误。

期望:一旦方法“changdrawer”返回true,while循环应该恢复。如果我的代码需要更正,请帮助我。

public class ManageTaskList {

    public void CheckRequestType() throws InterruptedException
    {

        //Switching the driver to TaskList frame
        LaunchBrowser.driver.switchTo().frame("taskList");

        boolean dateFlag=false;
        String date = "06/12";

        WebElement table = LaunchBrowser.driver.findElement(By.id("dataTable"));
        List<WebElement> rows = table.findElements(By.tagName("tr"));
        Iterator<WebElement> i = rows.iterator();
        System.out.println("Table has following content");
        while(i.hasNext())
        {
            WebElement row=i.next();
            List<WebElement> columns= row.findElements(By.tagName("td"));
            Iterator<WebElement> j = columns.iterator();
                while(j.hasNext())
                { 
                    WebElement column = j.next();


                    String ColumnValues=column.getText();
                    //System.out.println("ColumnValues" + ColumnValues);

                    if (ColumnValues.contains(date))
                    {
                         System.out.println("Date confirmed" +ColumnValues );
                        dateFlag = true;
                    }


                    if (ColumnValues.contentEquals("Issue Change Drawer") && dateFlag==true)
                    {
                        System.out.println("Found Change Drawer");
                        dateFlag=false;
                        column.click();
                        ChangeDrawer();
                        Thread.sleep(100);
                    }



            }

    }
    public boolean ChangeDrawer() 
    {

        // Issue Change Drawer
        LaunchBrowser.driver.findElement(By.xpath(".//*[@id='content']/div[3]/form/table/tbody/tr[2]/td/table/tbody/tr/td[1]/input")).click();
        LaunchBrowser.driver.switchTo().defaultContent();
        return true;

    }

}

1 个答案:

答案 0 :(得分:0)

如果changeDrawer方法(即单击元素)导致页面刷新,甚至表元素都要更改,即使您最终仍然有一个仍然匹配您的选择器的WebElement(在这种情况下,行) ),您仍然持有对“旧”对象的引用,该对象在页面中不再存在。

如果是这种情况,您需要再次调用findElement / s方法来刷新WebElement。