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

GhostDriver在对现有元素执行javascript时引发陈旧异常“Cache中元素不存在”

戚同
2023-03-14
by = getBy_A001();  
List<WebElement> welCollecN1 = myLibWorks.findElements(driver, timeOutInSeconds, pollingForSecond, by);  
if (welCollecN1 != null) {  
    WebElement wel01 = welCollecN1.iterator().next();  
    if(wel01 != null)  
    {  
        by = getBy_A002();  
        List<WebElement> welCollecN2 = myLibWorks.findElements(wel01, timeOutInSeconds, pollingForSecond, by);  
        if (welCollecN2 != null) {  
            WebElement wel02 = welCollecN2.iterator().next();  
            if(wel02 != null)  
            {  
                String value = null;  
                value = elm.getText();  
                if(value.length() == 0) {  
                    //-------------------------------------------------  
                    // REACH here then i think its ok above, this works almost of time too  
                    // THIS line throws "Element does not exist in cache"  
                    value = (String) ((JavascriptExecutor) driver).executeScript(driver, "return arguments[0].innerHTML", wel02);   // <<== ERROR  
                    //-------------------------------------------------  
                }  
            }  
        }  
    }  
}  
/**  
 * Retrieves an element from the cache. Will verify that the element is
 * still attached to the DOM before returning.
 * @param {string} key The element's key in the cache.
 * @param {Document=} opt_doc The document whose cache to retrieve the element
 *     from. Defaults to the current document.
 * @return {Element|Window} The cached element.
 */
bot.inject.cache.getElement = function(key, opt_doc) {
  key = decodeURIComponent(key);
  var doc = opt_doc || document;
  var cache = bot.inject.cache.getCache_(doc);
  if (!goog.object.containsKey(cache, key)) {
    // Throw STALE_ELEMENT_REFERENCE instead of NO_SUCH_ELEMENT since the
    // key may have been defined by a prior document's cache.
    throw new bot.Error(bot.ErrorCode.STALE_ELEMENT_REFERENCE,
        'Element does not exist in cache');
  }

  var el = cache[key];

  // If this is a Window check if it's closed
  if (goog.object.containsKey(el, 'setInterval')) {
    if (el.closed) {
      delete cache[key];
      throw new bot.Error(bot.ErrorCode.NO_SUCH_WINDOW,
          'Window has been closed.');
    }
    return el;
  }

  // Make sure the element is still attached to the DOM before returning.
  var node = el;
  while (node) {
    if (node == doc.documentElement) {
      return el;
    }
    node = node.parentNode;
  }
  delete cache[key];
  throw new bot.Error(bot.ErrorCode.STALE_ELEMENT_REFERENCE,
      'Element is no longer attached to the DOM');
};

共有1个答案

师承弼
2023-03-14

在包含GhostDriver依赖项和运行Chrome Driver测试时,我也遇到了同样的问题。将这两个附加依赖项添加到pom.xml中解决了这个问题:

```

<dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-remote-driver</artifactId>
        <version>2.53.0</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-server</artifactId>
        <version>2.53.0</version>
    </dependency>

```

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

  • 我的WebDriver脚本只是在第1页(产品展示页)上找到元素,然后单击第1个元素,看看它是否工作,然后导航回产品展示页。 它抛出过时的元素引用错误,并且没有单击页面上的第二个元素,表示元素没有附加到页面。 代码是:

  • 我正在写一个小的抓取程序,它导航到一个包含链接列表的页面, 它单击第一个链接,打开一个新页面,获取一些详细信息,然后导航回包含链接列表的页面,然后尝试查找下一个链接,但我得到: 组织。openqa。硒。StaleElementReferenceException:stale元素引用:元素未附加到页面文档 你知道我该怎么避免吗?

  • 我有一个下拉列表,我第一次能够按索引选择元素。当我第二次尝试选择元素时,它会抛出陈旧的元素引用错误。我尝试了try catch block,显式等待,但没有任何效果。

  • 我正在使用驱动程序。findelements(By.xpath(“//*);要检索页面上的所有元素,但是在IE9/IE10上,我得到了一个陈旧的元素异常。我如何处理它?请帮助我。 错误如下所示:

  • 我和我的团队最近开始使用SeleniumWeb驱动程序和JUnit开发自动化脚本。我面临着一个问题,我真的对如何继续下去毫无想法。任何建议都是有用的。 问题是这样的:我有一个页面,在这个页面中,我在一个表单中上传了两个电子表格,然后按submit按钮确认上传。 上传完成后,它会用数据填充数据库,下一页会确认每个excel的行数。 我正在尝试获取确认上传的“标签”类型的元素。 所有这些都可以在本地成