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

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

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

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

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

 package main.aaron.demo.javascript;

 import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test; import main.aaron.sele.core.TestCase; /**
* JavaScript 在 Selenium 自动化中的应用实例
*
* @author Aaron.ffp
* @version V1.0.0: autoSeleniumDemo main.aaron.demo.javascript JavaScript.java, 2015-6-17 00:24:59 Exp $
*/
public class JavaScript extends TestCase{
// 执行 JavaScript 脚本,输入查询内容
private String jscript = "document.getElementById('q_show').value='iPhone 6 plus'";
private String baseUrl = "http://www.yixun.com/"; /**
* JavaScript 赋值
*
* @author Aaron.ffp
* @version V1.0.0: autoSeleniumDemo main.aaron.demo.javascript JavaScript.java testJscript, 2015-6-17 12:37:57 Exp $
*
* @throws InterruptedException
*/
@Test
public void testJscript() throws InterruptedException{
this.webdriver.get(this.baseUrl); WebElement search = this.webdriver.findElement(By.cssSelector(".mod_search_btn"));
System.out.println(search.getText());
this.execJavascript(jscript); WebElement in = this.webdriver.findElement(By.id("q_show")); search.click(); // 页面刷新,需要重新获取元素,否则会报错
// in = this.webdriver.findElement(By.id("q_show")); System.out.println("现像值 --- q_show.getText() : " + in.getText()); this.webdriver.close();
this.webdriver.quit();
} /**
* 执行 JScript 脚本
*
* @author Aaron.ffp
* @version V1.0.0: autoUISelenium main.java.aaron.sele.core SeleniumCore.java execJavascript, 2015-6-17 00:25:38 Exp $
*
* @param jscript 脚本
*/
public void execJavascript(String jscript){
((JavascriptExecutor)this.webdriver).executeScript(jscript);
}
}

元素失效演示:StaleElementReferenceException

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

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

05-07 15:48
查看更多