今天有個朋友在群里問 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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
