在做自动化测试的时候,遇到此问题多次:
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
脚本先进行查询,然后获取查询结果
driver.find_element_by_id("searchname").send_keys("oo")
driver.find_element_by_id("searchtruename").send_keys("di")
#Click search button
driver.find_element_by_id("search").click()
table=driver.find_element_by_id("dataTables-example")
table_rows=table.find_elements_by_tag_name("tr")
#get total row number
table_cols=table.find_elements_by_tag_name("th")
在获取table的行数时,总是会遇到StaleElementReferenceException异常,有解决方案如下:
1)重新刷新页面:driver.refresh(),此方法对此问题解决非常有效,但是我的测试场景中不允许刷新,否则,查询结果就变化了,所以此方法不能使用,尝试使用接下来的方法:设置等待时间。
2)设置等待时间:time.sleep(n),对脚本使用此方法,但是仍然报错,并没有解决我的问题。PS某些情况下此等待是可以解决此问题的,但是并不是时常奏效
3)捕捉异常StaleElementReferenceException,然后重新获取元素,此方法比较靠谱,并且我的脚本使用此方法后,执行通过。
后续如果有更好的解决方法,继续补充。
在执行脚本时,有时候引用元素对象会抛出如下
异常
:
selenium
.common.
exception
s.
Stale
Element
Reference
Exception
: Message:
stale
element
reference
:
element
is not attached to the page document
字面上的意思是,引用的元素已过时。原因是页面刷新了,此时当然找不到之前页面的元素,就算是后退回来的页面也是不一样的。
我们来看看
如果把下面几行代码注释掉,我们会发现运行报错位置在“输入用户名”,
这是因为,第二步点击“登陆”时,浏览器又弹出了一个新的窗口,程序每次都会去第一个窗口中寻找元素,而“输入用户名”在弹出的第二个窗口标签里,所以是找不到的。
#latest_
window
=driver.
window
_handles[-1]
#driver.close() 关闭窗口,保证浏览器只有一个窗口
#driver.swit...
如截图所示,
异常
原因:
stale
element
reference
:
element
is not attached to the page document
用例执行环境
java 1.8
selenium
3.141.0
docker(chromedriver 2.43 + chromebrowser 70.0.3538.77)
出现
该问题的场景
autoOperate.ver...
driver.find_
element
_by_id("searchname").send_keys("oo")
driver.find_
element
_by_id("searchtruename").send_keys("di")
#Click search button
driver.find_
element
_by_id("search").click()
table=driver.find_
element
_b.
Stale
Element
Reference
Exception
: Message: The
element
reference
of is
stale
; either the
element
is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
元素引用已经失效;要么元素不再附加到DOM中,要么不在当前框架上下文中,要么文档已经刷新
原因:机子太
driver.get('https://www.baidu.com/')
以知乎为例,打开一个新的界面,
使用
execute_script() 方法,执行JavaScript代码。
并调用driver的current_url属性,然后查看当前页面的url:
drive
1、
切换
窗口
在
使用
webdriver的时候,经常会遇到在多个窗口之间
切换
的操作,比如在A窗口操作某个元素,跳转到B窗口,然后又进入C窗口,此时这种情况就需要用到特殊的窗口处理方法
- [ ]
切换
到新窗口里面的操作
循环遍历 deriver.
window
_handles
driver.switch_to.wondow(handle)的方法切入新窗口
切换
到最初的窗口
需要保存主窗口的handle
关闭窗口用 close
比如: 打开百度,输入周杰伦,点击链接打开新的窗口
from sele
python
+
selenium
报错:
stale
element
reference
:
element
is not attached to the page document
一:实现目的
选择input级联下拉框内容
二:报错原因
点击速度多快,导致查找元素没反应过来
三:解决方式
加个强制等待即可