今天有個朋友在群里問 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()值為空問題探索及解決
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

