1、现象

在执行脚本时,有时候引用一些元素对象会抛出如下异常

org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

2、报错原因

官方给出解释如下:

The element has been deleted entirely.
The element is no longer attached to the DOM.

我个人理解:

就是页面元素过期,引用的元素过时,不再依附于当前页面,需要重新定位获取元素对象

如果JavaScript把网页给刷新了,那么操作的时候就会碰到Stale Element Reference Exception。

官方地址:http://docs.seleniumhq.org/exceptions/stale_element_reference.jsp

解决方案:

使用WebDriverWait类的构造方法接受了一个WebDriver对象和一个等待最长时间(30秒)。然后调用until方法,其中重写了ExpectedCondition接口中的apply方法,让其返回一个WebElement,即加载完成的元素,然后点击。默认情况下,WebDriverWait每500毫秒调用一次ExpectedCondition,直到有成功的返回,当然如果超过设定的值还没有成功的返回,将抛出异常,循环五次查找,实际实验发现,函数里虽然最多尝试5次,但是一般也就查询最多3次,也在没有报错,比起线程等待要好很多,

代码如下:

/**
* 等待指定元素文本出现
*
* @param xpath
* @param text
* @return
* @throws Exception
*/
public Boolean isDisplay(final String xpath, final String text) {
logger.info("等待指定元素文本显示");
boolean result = false;
int attempts = 0;
while (attempts < 5) {
try {
attempts++;
logger.info("扫描开始元素开始第" + attempts + "次");
result = new WebDriverWait(driver, 30)
.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return driver.findElement(By.xpath(xpath)).getText().contains(text);
}
});
logger.info("扫描开始元素结束");
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}

关于报错stale element reference: element is not attached to the page document处理的更多相关文章

  1. 报错stale element reference: element is not attached to the page document结局方案

    今天在调试脚本时,遇到如下报错: org.openqa.selenium.StaleElementReferenceException: stale element reference: elemen ...

  2. selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

    抓取网页代码后,由于是在同一个li标签下,所以使用一次性抓取,所有的a标签,然后循环做不同的操作,但是抛出找不到元素异常. def office_page(_chrome: Chrome): sn = ...

  3. mybatis项目启动报错 The content of element type "resultMap" must match "(constructor?,id*,result*,association*,collection*,discriminator?)".

    启动项目报错 2018-02-26 17:09:51,535 ERROR [org.springframework.web.context.ContextLoader] - Context initi ...

  4. 关于xpath语句完全正确,但是页面报错: no such element: Unable to locate element: {"method":"xpath","selector":"xpath"}

    之前使用selenium-webdriver来写UI的自动化脚本,发现有一个元素一直无法定位,查看其源码,如下 利用xpathChecker验证了xpath语句的是正确的,但是控制台一直报错: no ...

  5. stale element reference: element is not attached to the page document 异常

    在执行脚本时,有时候引用一些元素对象会抛出如下异常 org.openqa.selenium.StaleElementReferenceException: stale element referenc ...

  6. java报错:The reference to entity "characterEncoding" must end with the ';' delimiter.

    java关于报错:The reference to entity "characterEncoding" must end with the ';' delimiter. Java ...

  7. 【问题记录】element is not attached to the page document

    遇到ui脚本报错:element is not attached to the page document 解决办法,再次定位即可

  8. 记录微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function

    微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function 这个报错是在将数组对象通过 ...

  9. Selenium2学习-012-WebUI自动化实战实例-010-解决元素失效:StaleElementReferenceException: stale element reference: element is not attached to the page document

    元素失效的想象提示信息如下图所示,此种问题通常是因为元素页面刷新之后,为重新获取元素导致的. 解决此类问题比较简单,只需要在页面刷新之后,重新获取一下元素,就可以消除此种错误了. 以下以易迅网搜索为例 ...

随机推荐

  1. JS中every()和some()的用法

    every()与some()方法都是JS中数组的迭代方法. every()是对数组中每一项运行给定函数,如果该函数对每一项返回true,则返回true. some()是对数组中每一项运行给定函数,如果 ...

  2. c/c++ 整形转字符串

    int findex;char instr[10]; sprintf(instr,"%d",findex); 好像ltoa用不了...

  3. 在 CentOS 6.x 上安装最新版本的 git

    在 CentOS 的默认仓库中有git,所以最简单的方法是: $ sudo yum install git 这种方法虽然简单,但是一般仓库里的版本更新不及时,比如 CentOS 仓库中的 git 最新 ...

  4. Hadoop+HBase+Spark+Hive环境搭建

    杨赟快跑 简书作者 2018-09-24 10:24 打开App 摘要:大数据门槛较高,仅仅环境的搭建可能就要耗费我们大量的精力,本文总结了作者是如何搭建大数据环境的(单机版和集群版),希望能帮助学弟 ...

  5. xkcd 单线程下载图片

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  6. php 配置文件不加载的一次配置

    最近在一台服务器上安装配置了5.6和7.1两个版本的php,之前是5.6的.使用都正常,7.1是后期安装的. 问题: 在7.1的程序目录中命名的配置文件为:php7-9026.ini,同时安装并在配置 ...

  7. 学习windows编程 day3 之窗口绘画二:边框绘制函数

    #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM l ...

  8. JS知识整理之 Call&Apply方法

    JavaScript中的函数也是对象,和其他JS对象一样也可以包含方法,其中Call和Apply就是其中比较重要的方法,可以用来间接的调用函数.这两个方法允许显式制定调用所需的this值,也就是说所有 ...

  9. Python数据分析学习目录

    python数据分析学习目录 Anaconda的安装和更新 矩阵NumPy pandas数据表 matplotlib-2D绘图库学习目录                      

  10. POJ3635 Full Tank?【Dijkstra+DP】

    题意: n个城市之间有m条双向路.每条路要耗费一定的油量.每个城市的油价是固定并且已经给出的.有q个询问,表示从城市s走到e,油箱的容量为c,求最便宜的方案. 思路: 用Dijkstra+Heap即可 ...