在做自动化测试的时候,遇到此问题多次:

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级联下拉框内容 二:报错原因 点击速度多快,导致查找元素没反应过来 三:解决方式 加个强制等待即可