今天有个朋友在群里问 WebElement.getText() 值为空,当你发现取到的值为空的时候,会不会郁闷呢?明明看到的值不为空,脚本看着也没有问题啊,为何取到的值为空呢!!!万千纠结啊,若是长时间困在此处,是不是犹如修炼冲关遇到了瓶颈,就差那么一点点就可得道,哎。。。。。。
不知道其他的各位小主们有没有遇到过这种情况,下面俺就针对此问题提出一些俺自己的见解,敬请各位小主参阅,若有不足或错误之处,敬请大神告知,非常感谢!
出现此种情况的原因有以下几点:
1、元素隐藏,即 WebElement.isDisplayed = false,当 WebDriver 断定 isDisplayed = false 时,WebElement.getText() 值为空;
--> 解决方法:通过 js 修改元素的属性,使其 CSS display 的值为 block,而非 none
2、元素的值存在某个属性当中,例如 value 属性,此种一般是通过 js 操作赋值到 value 的
--> 解决方法:通过 WebElement.getAttribute('') 获取对应的值,当 isDisplayed = false 时,WebElement.getAttribute('') 可正确获取元素对应的属性值
3、当前元素并未存储相应的操作值,操作值被存在了其他的地方
--> 解决方法:找到对应的元素,获取值
同时,俺在网上找到了一个实例对应上述三个原因的第 3 点,因而就以易迅网搜索商品的搜索框为例,实际演示一下,以下为源码,请参阅:
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
//
打开易迅网首页
32
this
.webdriver.get(
this
.baseUrl);
33
34
//
获取搜索按钮
35
WebElement search =
this
.webdriver.findElement(By.cssSelector(".mod_search_btn"
));
36
37
//
输入查询值
38
this
.execJavascript(jscript);
39
40
//
获取搜索框
41
WebElement in =
this
.webdriver.findElement(By.id("q_show"
));
42
43
//
点击搜索按钮
44
search.click();
45
46
//
获取搜索值的真正存储位置
47
WebElement intext =
this
.webdriver.findElement(By.cssSelector("#keyWord"
));
48
49
//
页面刷新,需要重新获取元素,否则会报错
50
in =
this
.webdriver.findElement(By.id("q_show"
));
51
52
//
搜索框中的值未曾保存在 q_show 元素内,因而最终获得的值为空
53
System.out.println("现像值 --- q_show.getText() : " +
in.getText());
54
//
搜索框中的值实际保存的元素,对应值为空的第二种原因
55
System.out.println("本质值,对应值为空的第二种原因 --- #keyWord.getAttribute('') : " +
intext.getText());
56
//
搜索框中的值实际保存的元素,对应值为空的第三种原因
57
System.out.println("本质值,对应值为空的第三种原因 --- #keyWord.getAttribute('') : " + intext.getAttribute("value"
));
58
59
this
.webdriver.close();
60
this
.webdriver.quit();
61
}
62
63
/**
64
* 执行 JScript 脚本
65
*
66
*
@author
Aaron.ffp
67
*
@version
V1.0.0: autoUISelenium main.java.aaron.sele.core SeleniumCore.java execJavascript, 2015-6-17 00:25:38 Exp $
68
*
69
*
@param
jscript 脚本
70
*/
71
public
void
execJavascript(String jscript){
72
((JavascriptExecutor)
this
.webdriver).executeScript(jscript);
73
}
74
}
至此, WebUI 自动化功能测试脚本 第 011 篇-WebElement.getText()值为空问题探索及解决 顺利完结,希望此文能够给初学 Selenium 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^
Selenium2学习-013-WebUI自动化实战实例-011-WebElement.getText()值为空问题探索及解决

