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

Selenium Webdriver过时元素异常错误

吴英武
2023-03-14

大家好,我正在使用selenium webdriver,在运行下面的脚本时,我在脚本中突出显示的位置遇到了陈旧元素异常错误。

我的脚本停在那里,我不能运行。

错误消息为-Stale元素异常错误。在缓存中找不到该元素,可能是页面在查找后发生了更改。

在这种情况下,请任何人帮助我,并指导我纠正这个错误。

你好Vignesh K S

@Test
  public void testClient() throws Exception {
    driver.get("http://t1accounts.govreports.com.au/?service=govreports");
    driver.findElement(By.id("Password")).clear();
    driver.findElement(By.id("Password")).sendKeys("Viki2607");
    driver.findElement(By.id("UserName")).clear();
    driver.findElement(By.id("UserName")).sendKeys("vignesh@eimpact.com.au");
    driver.findElement(By.id("btnLogin")).click();
    driver.findElement(By.xpath(".//*[@id='side-menu']/li[2]/a/span")).click();
    driver.findElement(By.cssSelector("span.hide380")).click();
    driver.findElement(By.id("Individual")).click();
    //driver.wait(5);
    **driver.findElement(By.id("ABN")).clear();**
    driver.findElement(By.id("ABN")).sendKeys("38091241128");
    driver.findElement(By.id("TFN")).clear();
    driver.findElement(By.id("TFN")).sendKeys("100000001");
    driver.findElement(By.id("BusinessName")).clear();
    driver.findElement(By.id("BusinessName")).sendKeys("LORGE CONSULTING (AUSTRALIA) PTY LTD");
    driver.findElement(By.id("TradingName")).clear();
    driver.findElement(By.id("TradingName")).sendKeys("LORGE CONSULTING (AUSTRALIA) PTY LTD");
    //driver.findElement(By.xpath("//ul[@id='Individual_Salutation_listbox']/li")).click();
    driver.findElement(By.id("Individual_Salutation")).clear();
    driver.findElement(By.id("Individual_Salutation")).sendKeys("Ms");
    //new Select(driver.findElement(By.id("Individual_Salutation"))).selectByVisibleText("Mr");
    //driver.findElement(By.id("Individual_Salutation")).sendKeys("Mr");
    driver.findElement(By.id("Individual_FirstName")).clear();
    driver.findElement(By.id("Individual_FirstName")).sendKeys("Joan");
    driver.findElement(By.id("Individual_LastName")).clear();
    driver.findElement(By.id("Individual_LastName")).sendKeys("Ignatius");
    driver.findElement(By.id("Individual_Phone")).clear();
    driver.findElement(By.id("Individual_Phone")).sendKeys("042323155");
    driver.findElement(By.id("Individual_Email")).clear();
    driver.findElement(By.id("Individual_Email")).sendKeys("test@govreports.com.au");
    driver.findElement(By.id("PostalAddress_Line1")).clear();
    driver.findElement(By.id("PostalAddress_Line1")).sendKeys("Walker Street");
    driver.findElement(By.id("PostalAddress_City")).sendKeys("SYDNEY");
    driver.findElement(By.id("PostalAddress_Region")).sendKeys("NSW");
    driver.findElement(By.id("PostalAddress_Postcode")).sendKeys("1001");
    Thread.sleep(5000);
    driver.findElement(By.id("PostalAddress_Country")).sendKeys("Australia");
    //Select objSelect = new Select(null);
    //new Select(driver.findElement(By.id("PostalAddress_City"))).selectByVisibleText("SYDNEY, NSW, Australia, 1001");
    driver.findElement(By.id("saveClient")).click();
    Thread.sleep(5000);
  }

共有2个答案

满和安
2023-03-14

当过时元素异常发生时!!

当支持这些文本框/按钮/链接的库发生更改时,可能会发生过时元素异常,这意味着这些元素是相同的,但网站中的引用现在发生了更改,而不会影响定位器。因此,我们存储在缓存中的引用(包括库引用)现在已变旧或过时,因为页面已用更新的库刷新。

for(int j=0; j<5;j++)
try {
    WebElement elementName=driver.findElement(By.id(“Individual_Salutation”));
    break;
} catch(StaleElementReferenceException e){
e.toString();
System.out.println(“Stale element error, trying ::  ” + e.getMessage());
}
能旭
2023-03-14

只要工作正常,您可能需要添加一个隐式等待,比如3-5秒,因为应用程序非常慢。或者,在元素处//*[@id='side-menu']/li[2]/a/span你也可以做

driver.navigate().to("http://t1hub.govreports.com.au/App/#/Clients/MyClients");

我相信你遇到问题的地方是ABN。然而,如果诱导适当的等待,它会很好地工作。

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

  • 问题内容: 今天,当我使用Selenium WebDrive时,出现错误。我的平台是mac osx。这是我的异常日志。 我不知道为什么会这样。我的Firefox路径是默认路径。谢谢您的帮助!! 问题答案: WebDriver使用端口7054(“锁定端口”)作为互斥体,以确保我们不会同时启动两个Firefox实例。您创建的每个新实例将在启动浏览器之前等待互斥体,然后在浏览器打开后立即释放互斥体。 因

  • 我试图自动化一个场景,条件是我必须选择所有下拉选项,然后逐个单击这些选项。我尝试了代码,但它只点击了第一个选项,。将错误显示为陈旧元素是不可点击的。请帮忙。

  • 问题内容: 我的网站上有一个选择控件。我正在使用页面对象与页面进行交互。如果我这样做(在我的课程下的前两行和我的方法中) 它以空指针失败。我也尝试了没有。 现在,如果我在我的方法中执行此操作,则一切正常,然后选择正确的项目 这是该控件的实际网页摘要(已编辑以保护无辜者) 让我说我可以解决我的问题, 但是 我不明白为什么“ 正常 ”路径无法正常工作。 问题答案: 那是因为该类具有以下构造函数: 见J

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

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