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

元素失效的想象提示信息如下图所示,此种问题通常是因为元素页面刷新之后,为重新获取元素导致的。

解决此类问题比较简单,只需要在页面刷新之后,重新获取一下元素,就可以消除此种错误了。

以下以易迅网搜索为例进行实例代码演示,希望对各位小主有所启发,若有不足或错误之处,敬请大神指正,不胜感激!

下述代码中若需消除 StaleElementReferenceException 异常,将 43 行中的注释取消,重新运行即可。

 1 package main.aaron.demo.javascript;
 2 
 3 import org.openqa.selenium.By;
 4 import org.openqa.selenium.JavascriptExecutor;
 5 import org.openqa.selenium.WebElement;
 6 import org.testng.annotations.Test;
 7 
 8 import main.aaron.sele.core.TestCase;
 9 
10 /**
11  * JavaScript 在 Selenium 自动化中的应用实例
12  * 
13  * @author Aaron.ffp
14  * @version V1.0.0: autoSeleniumDemo main.aaron.demo.javascript JavaScript.java, 2015-6-17 00:24:59 Exp $
15  */
16 public class JavaScript extends TestCase{
17     // 执行 JavaScript 脚本,输入查询内容
18     private String jscript = "document.getElementById('q_show').value='iPhone 6 plus'";
19     private String baseUrl = "http://www.yixun.com/";
20     
21     /**
22      * JavaScript 赋值
23      * 
24      * @author Aaron.ffp
25      * @version V1.0.0: autoSeleniumDemo main.aaron.demo.javascript JavaScript.java testJscript, 2015-6-17 12:37:57 Exp $
26      * 
27      * @throws InterruptedException
28      */
29     @Test
30     public void testJscript() throws InterruptedException{
31         this.webdriver.get(this.baseUrl);
32         
33         WebElement search = this.webdriver.findElement(By.cssSelector(".mod_search_btn"));
34         System.out.println(search.getText());
35         this.execJavascript(jscript);
36         
37         
38         WebElement in = this.webdriver.findElement(By.id("q_show"));
39         
40         search.click();
41 
42         // 页面刷新,需要重新获取元素,否则会报错
43         // in = this.webdriver.findElement(By.id("q_show"));
44         
45         System.out.println("现像值 --- q_show.getText() : " + in.getText());
46         
47         this.webdriver.close();
48         this.webdriver.quit();
49     }
50     
51     /**
52      * 执行 JScript 脚本
53      * 
54      * @author Aaron.ffp
55      * @version V1.0.0: autoUISelenium main.java.aaron.sele.core SeleniumCore.java execJavascript, 2015-6-17 00:25:38 Exp $
56      * 
57      * @param jscript 脚本
58      */
59     public void execJavascript(String jscript){
60         ((JavascriptExecutor)this.webdriver).executeScript(jscript);
61     }
62 }
元素失效演示:StaleElementReferenceException

至此,WebUI 自动化功能测试脚本第 010 篇-解决元素失效:StaleElementReferenceException 顺利完结,希望此文能够给初学 Selenium 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

 

原文地址:https://www.cnblogs.com/fengpingfan/p/4583325.html