Java selenium过时元素

Java selenium过时元素,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我有以下内容: <div _ngcontent-yvb-1="" ng-reflect-class-name="d3-data-table-cell code" class="d3-data-table-cell code" ng-reflect-id="entity_data_manager_table_cell_code" id="entity_data_manager_table_cell_code"> UP </div> 向上的 我使用Java在

我有以下内容:

<div _ngcontent-yvb-1="" ng-reflect-class-name="d3-data-table-cell code" class="d3-data-table-cell code" ng-reflect-id="entity_data_manager_table_cell_code" id="entity_data_manager_table_cell_code">
    UP
  </div>

向上的
我使用Java在Selenium中做了一个测试,其中我使用
id=“entity\u data\u manager\u table\u cell\u code”
识别了元素。该测试过去每5次通过一次,但有时会失败,并显示消息
stale element
。现在,测试始终失败,并显示以下消息:
stale元素引用:元素未附加到页面文档


为什么会这样?开发商说他没有改变任何东西。解决方案是什么?

原因可能是直到您访问元素时,您的元素才被完全加载。 尝试对该特定元素使用显式等待。 还要咨询开发人员,为该元素提供一个唯一的引用,以防它动态变化

如果页面上发生的DOM操作暂时导致元素不可访问,则会发生过时的元素引用。考虑到这些情况,您可以尝试在循环中多次访问该元素,然后最终引发异常

并尝试按类名查找元素

driver.findElement(By.className("date-header"));

原因可能是直到您访问元素时才完全加载它。 尝试对该特定元素使用显式等待。 还要咨询开发人员,为该元素提供一个唯一的引用,以防它动态变化

如果页面上发生的DOM操作暂时导致元素不可访问,则会发生过时的元素引用。考虑到这些情况,您可以尝试在循环中多次访问该元素,然后最终引发异常

并尝试按类名查找元素

driver.findElement(By.className("date-header"));

您可以按如下方式处理异常

  public boolean retryingFindClick(By by) {
    boolean result = false;
    int attempts = 0;
    while(attempts < 2) {
        try {
            driver.findElement(by).click();
            result = true;
            break;
        } catch(StaleElementException e) {
        }
        attempts++;
    }
    return result;
  }
public boolean retryingFindClick(By){
布尔结果=假;
int=0;
而(尝试次数<2次){
试一试{
driver.findElement(by).click();
结果=真;
打破
}捕获(StaleElementException e){
}
尝试++;
}
返回结果;
}

有关更多信息,请参见此

您可以按如下方式处理异常

  public boolean retryingFindClick(By by) {
    boolean result = false;
    int attempts = 0;
    while(attempts < 2) {
        try {
            driver.findElement(by).click();
            result = true;
            break;
        } catch(StaleElementException e) {
        }
        attempts++;
    }
    return result;
  }
public boolean retryingFindClick(By){
布尔结果=假;
int=0;
而(尝试次数<2次){
试一试{
driver.findElement(by).click();
结果=真;
打破
}捕获(StaleElementException e){
}
尝试++;
}
返回结果;
}
更多信息请参见此

我使用此“WebElement”而不是普通的“WebElement”修复了它 这个主意是别人给我的,我已经不记得了

public class RefreshableWebElement2 implements WebElement {

 private final WebDriver driver;
 private final By        by;

 public RefreshableWebElement2(WebDriver driver, By by) {
    this.driver = driver;
    this.by = by;
 }

 private WebElement getElement() {
   return driver.findElement(by);
 }

 @Override
 public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
   return getElement().getScreenshotAs(target);
 }

 @Override
 public void click() {
   getElement().click();
 }
公共类RefreshableWebElement2实现WebElement{
私有最终WebDriver;
私人终审法院;
公共刷新WebElement2(WebDriver驱动程序,按){
this.driver=driver;
这个;
}
私有WebElement getElement(){
返回驱动程序findElement(通过);
}
@凌驾
public X getScreenshotAs(OutputType目标)引发WebDriverException{
返回getElement().getScreenshotAs(目标);
}
@凌驾
公共作废点击(){
getElement()。单击();
}
//。。。 }

我用这个“WebElement”而不是普通的“WebElement”修复了它 这个主意是别人给我的,我已经不记得了

public class RefreshableWebElement2 implements WebElement {

 private final WebDriver driver;
 private final By        by;

 public RefreshableWebElement2(WebDriver driver, By by) {
    this.driver = driver;
    this.by = by;
 }

 private WebElement getElement() {
   return driver.findElement(by);
 }

 @Override
 public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
   return getElement().getScreenshotAs(target);
 }

 @Override
 public void click() {
   getElement().click();
 }
公共类RefreshableWebElement2实现WebElement{
私有最终WebDriver;
私人终审法院;
公共刷新WebElement2(WebDriver驱动程序,按){
this.driver=driver;
这个;
}
私有WebElement getElement(){
返回驱动程序findElement(通过);
}
@凌驾
public X getScreenshotAs(OutputType目标)引发WebDriverException{
返回getElement().getScreenshotAs(目标);
}
@凌驾
公共作废点击(){
getElement()。单击();
}
//。。。
}

在与元素交互之前添加一些等待,这是任何帧中的元素吗?我在互联网上做了一些研究,并在多个浏览器上运行了测试。问题似乎与使用含硒食品有关。当同一个测试在另一个浏览器上运行时,例如Chrome,没有问题。在与元素交互之前添加一些等待。在任何框架内的元素是什么?我在互联网上做了一些研究,并在多个浏览器上运行了我的测试。问题似乎与使用含硒食品有关。当相同的测试在另一个浏览器(例如Chrome)上运行时,没有问题。