第二十三节: selenium之 坑(StaleElementReferenceException: Message: Element not found in the cache...)
来源:互联网 发布:澳洲商婚 知乎 编辑:程序博客网 时间:2024/06/06 14:25
转载:http://blog.csdn.net/huilan_same/article/details/52432206
今天给大家分享一个selenium中经常会有人遇到的坑:
selenium.common.exceptions.StaleElementReferenceException: Message: Element not found in the cache - perhaps the page has changed since it was looked up
群里经常会有人问,“我循环去点击一列链接,但是只能点到第一个,第二个就失败了,为什么?”。原因就在这里:你点击第二个时已经是新页面,当然找不到之前页面的元素。这时,他会问“可是明明元素就在那里,没有变,甚至我是回退回来的,页面都没有变,怎么会说是新页面?”。这个就需要你明白页面长得一样不代表就是同一张页面,就像两个人长得一样不一定是同一个人,他们的身份证号不同。页面,甚至页面上的元素都是有自己的身份证号(id)的。
我们来试试看:
代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
结果:
- 1
- 2
我们发现,仅仅是刷新了一下页面,两次的element id是不同的,也就是说这是两个不同的元素,如果你用以下的方式来定位,自然会因为找不到而报错:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
结果:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
原因很明显,你用别人的身份证id去找现在的人,哪怕这两个人长得很像,他也会告诉你:对不起,你找错人了。
当然,不仅仅这一种情况,如果你执行以下的操作,都有可能找错人:
- refresh,不论你是主动刷新还是页面自动刷新
- back,已经跳转到了其他页面,然后你用driver.back()跳回来,这也是一张新的页面了
- 跳转到了新的页面,但这张新页面上有一些元素跟之前页面是长得一样的,这也是一张新的页面了。比如:一排分页按钮,你点击下一页跳转到了第二页,想要还用原来的元素操作到下一页,那也是不可能的了。
除此之外可能还有其他的原因,总之你看到这类型长得差不多,但是对页面有了操作的情况,就应该想想这种可能性了。
那遇到这种情况该怎么办?
很简单:
只要刷新页面之后重新获取元素就行,不要提前获取一组元素,然后去循环操作每一个元素,这种情况还是获取元素的个数,然后在循环中获取相应位置的元素,在用的时候才去获取,这样你就获取到最新的id了,也不会出现找错人的尴尬了。
总之一句话,遇到页面有变化的情况,不要去循环元素,去循环个数或者定位方式,在循环中获取元素。
- 第二十三节: selenium之 坑(StaleElementReferenceException: Message: Element not found in the cache...)
- selenium之 坑(StaleElementReferenceException: Message: Element not found in the cache...)
- Selenium Webdriver : Element not found in the cache - perhaps the page has changed since it
- 解决webdriver(Element not found in the cache - perhaps the page has changed since it was looked up )
- 关于DOM element with id in Element cache is not the same as element in the Dom解决方法
- 第二十三节 高级类型 (二)
- 第二十三节,SIMD
- 第二十三节javascript
- NHibernate配置文件问题-element was not found in the configuration file.
- 120329 selenium IDE 导致 Element id not found 原因之一
- org.openqa.selenium.StaleElementReferenceException
- org.openqa.selenium.StaleElementReferenceException
- 第二十三节 蓝牙协议栈之主机通讯
- spark-sql之 Caused by: MetaException(message:Version information not found in metastore. )
- Note: This element has no attached Javadoc and the Javadoc could not be found in the attached source
- Note:This element has no attached source and the javadoc could not be found in the attached javadoc
- 【Android】提示Note: This element has no attached source and the Javadoc could not be found in the attac
- php学习 第二十三节
- 【巨杉访谈】分布式数据库如何存储管理非结构化数据?
- HDU5831-Rikka with Parenthesis II
- svn导出项目到myeclipse,运行报ClassNotFoundException
- JavaWeb项目 在web.xml中设置读取application.xml
- 基本的排序问题
- 第二十三节: selenium之 坑(StaleElementReferenceException: Message: Element not found in the cache...)
- Java并发之AQS详解
- 诸神之战 | 赛事升级,4.1亿元奖金纳入浙江赛区奖项权益
- JDK密钥证书管理工具keystore
- mysql5.7.19免安装版配置流程(亲测可用)
- xListView下拉刷新,上拉加载
- Spring简介及环境搭建(导jar包;创建核心配置文件;测试bug)
- java8中 关于Base64使用的处理
- phpunit