当前位置: 首页 > 知识库问答 >
问题:

过时元素引用异常:如何解决?

白星腾
2023-03-14

我正在使用for循环来处理表元素。在第一次迭代中,它将在页面上搜索所需的元素。如果该元素在该页面上不可用,那么它将在第二个页面上搜索。如果元素在第一个页面上可用,Webdriver会成功地找到该元素,但如果元素在第一个页面上不可用,则它会在第二个页面上查找该元素。但在这里,for循环失败,出现称为“stale Element exception”的异常。

错误消息:

线程“main”org.openqa.selenium.staleElementReferenceException:过时元素引用:元素未附加到页面文档

 List <WebElement> allAmountValues = driver.findElements(By.xpath("(//table[@width=760][@cellspacing=1])[2]/tbody/tr/td[8]/div"));

     for(int i =0;i<allAmountValues.size();i++){
       System.out.println("Value are : "+allAmountValues.get(i).getText().replaceAll("\\s+", " "));
     }



String testValue = "100000";
 System.out.println("No.of Rows in the Table : "+allAmountValues.size());                

               for (int i1 =1; i1<allAmountValues.size();i1++) {


                    String amount = allAmountValues.get(i1+1).getText().replaceAll("\\s+","");
                    //System.out.println("amount Values : "+amount);
                    System.out.println("Value are : " + allAmountValues.get(i1).getText() + "== Corresponding link is : " + clicklinks.get(i1).getText());

                    if (amount.equalsIgnoreCase(testValue)) {
                        System.out.println("Found:" +testValue);

                        clicklinks.get(i1).click();
                        waitDriver();
                        driver.navigate().back();

                      break;
                    }
                    else
                    {
                        WebElement clickNext = driver.findElement(By.xpath("//a[contains(text(), 'Next')]"));
                        clickNext.click();


                    }


               }


                for(int rw=2;rw<allAmountValues.size();rw++)
                {
                    WebElement a1 = driver.findElement(By.xpath("(//table[@width=760][@cellspacing=1])[2]/tbody/tr["+rw+"]/td[8]/div/span"));
                     String amm = a1.getText().replaceAll("\\s+", "");
                     System.out.println("Current value is:" +amm);
                     if(amm.equalsIgnoreCase("100000"))
                     {
                         WebElement a2 = driver.findElement(By.xpath("/html/body/form/div/table/tbody/tr/td/table/tbody/tr[5]/td/table/tbody/tr["+rw+"]/td[1]/div/input[6]"));
                         a2.click();
                         break;
                     }
                }
                   WebElement authoriseButton = driver.findElement(By.xpath("//input[@name='btnAuthorise']"));
                  if(authoriseButton.isEnabled())
                  {
                      authoriseButton.click();
                  }
                  else
                  {
                      System.out.println("Authorise Button is not enabled");
                  }


         }

我面临以下问题的陈旧元素错误异常:String amount=AllAmountValues.Get(I1+1).GetText().ReplaceAll(“\\s+”,“”);此行。如有任何帮助,我们将不胜感激。

共有1个答案

鲍驰
2023-03-14

原因:

allamountvalues是最初存储的,因此当您在页面之间移动时,请尝试使用前面存储的相同元素;导致您StaleElementException错误

解决方案:

 类似资料:
  • 好的,我阅读了所有其他的链接,我尝试了上述不同解决方案的变体,但是它们都不适合我。 我的问题是,我有以下代码: 然而,我得到了以下错误: 这是篮子图标的css路径,它在菜单上。 网站是GWT,步骤如下:1。点击物品添加到购物篮2。增加到第三篮。点击篮子进入篮子。 然而,我似乎无法做到这一点。

  • 问题内容: 我在Selenium 2 Web驱动程序测试中具有以下代码,该代码在调试时有效,但是在构建中运行它时,大多数情况下会失败。我知道这一定与未刷新页面的方式有关,但不知道如何解决它,因此,任何有关我做错事情的指针都应该受到赞赏。我正在使用JSF primefaces作为我的Web应用程序框架。当我单击添加新链接时,会出现一个弹出对话框,其中包含一个输入框,我可以在其中输入日期,然后单击“保

  • 我正在使用以下代码检索我的链接: 接下来,我呼吁: 然后 并且抛出过时的元素异常。 现在,考虑到,我本以为可以避免这个问题,但它仍然存在。 我很想在加载页面源代码后,将其放入lxml中,以完全避免这个问题。 建立和迭代链接之间的时间最多为一秒钟。 有没有其他人遇到过这样的问题,并找到了解决方案? 感谢您的指导。

  • 下面是我正在努力工作的代码。 我从一个站点地图页面获取所有锚元素,然后将所有这些元素放入一个列表中。然后,我使用从所有这些元素获取URL。在这里之前,代码运行良好。 然而,之后我将这些URL作为参数,并将其传递到方法,以使用。代码一直工作到第一个链接,但一旦加载了第一个页面,就会出现stale元素异常。

  • 我正在尝试自动执行以下操作: 启动https://www.flipkart.com 我在线程“主”状态元素引用中得到期望:元素没有附加到miButton()方法中的页面文档。 请参阅错误详细信息部分。 HTML代码 Mi按钮点击-HTML 基类: 页面类 错误详细信息 线程“main”组织中出现异常。openqa。硒。StaleElementReferenceException:stale ele