Webdriver如何解决页面元素过期:org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up

时间:2020-12-26 16:39:34

当运行Webdriver时抛出如下异常:org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up。目前解决办法似乎只有一个,也是最显而易见的方式,重新定位一次该元素。我们不妨看下该异常所表达的意思:元素没有在缓存中找到,也许页面已经改变了当你在查找这个元素的时候。

在什么情况下会造成这种异常:当页面被刷新的时候,你还要操作这个页面上的元素。这句话什么意思?为什么说是在刷新的时候,我们不妨想象一个业务场景:当你在提交一个订单,提交完成之后,页面又刷新,重定向到了当前页面,然后你又需要提交另一个订单,在你第二次点击提交按钮的时候,就会抛出这个异常。发生的前提是:你第一次提交的时候是定位了提交按钮的:WebElement confrimBtn = driver.findElement(By.id("confrimBtn"));然后点击提交按钮,confrimBtn.click(),第二次提交订单时就偷懒了,直接confrimBtn.click(),然后,就没有然后了,自己死活找不到出错原因。

这里主要解释为什么会出现这个错误:当你需要对同一个页面进行多次重复的操作的时候,第一次定位的元素,页面刷新后,在你第二次,第三次需要调用时,浏览器默认认为它是失效的,不允许你去调用它。就相当于你买了张电影票,看完了这场电影,过了几天,你朋友约你一起去电影,你拿着上次的票,别人还会让你进去吗?