2016-03-08 81 views
1

使用getText()方法從下面的HTML代碼中提取文本不像我期望的那樣工作。使用Java中的Selenium Webdriver獲取帶格式的文本

HTML

<pre id="responseCommand"><code>RP/ABCDEFGHI/ 
    1.TESTING/UI 
    2 PHONE NUMBER 
    3 SOME FREE TEXT</code></pre> 

Java代碼,以提取從碼標籤的文本,如下:

WebDriverWait waitForElement = new WebDriverWait(driver, 20); 
WebElement recoverText = waitForElement.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("pre[id='responseCommand'] code"))); 
recoverText= driver.findElement(By.cssSelector("pre[id='responseCommand'] code")); 
String textStr = recoverText.getText(); 
System.out.println("Text extracted: \n" + textStr); 

println的輸出如下:

Text extracted: 
RP/ABCDEFGHI/ 
1.TESTING/UI 

其餘的「2 PHONE NUMBER」和「3 SOME FREE TEXT」不顯示。 *文本從.txt文件逐行讀取,每讀取一行後,使用sendKeys(Keys.ENTER)。這就是爲什麼,代碼標籤中的文本顯示在多行上。

儘管所有可用的文檔,我無法設法提取整個文本。

有什麼想法?

乾杯!

+0

是丟失的文本,是可見的發現呢? – Guy

+0

這可能是因爲當你調用getText()時,最後一行還沒有添加。嘗試使用本地調用進行檢查:js.executeScript(「return arguments [0] .innerHTML;」,recoverText) –

+0

我非常懷疑所謂的格式化是問題的原因。有沒有我們可以測試的頁面? –

回答

0

您可以嘗試使用innerText屬性

WebElement recoverText = waitForElement.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("pre[id='responseCommand'] code"))); 
String textStr = recoverText.getAttribute("innerText"); 
0

我終於找到了爲什麼我只顯示文本的一半。顯然,每次我在做keys.ENTER時,都會創建一個新的包裝到div標籤中的新的

<pre id="responseCommand"> 

。 因此,對於第一次的測試/ UI線進入

<div class="textResponse0"> 
    <pre id="responseCommand"> 
    <code>RP/NCE1A0955/ 
    1.TESTING/UI</code> 
    </pre> 
</div> 

爲進入第二線電話號碼,

<div class="textResponse1"> 
    <pre id="responseCommand"> 
    <code>RP/NCE1A0955/ 
    1.TESTING/UI 
    2 PHONE NUMBER</code> 
    </pre> 
</div> 

等等...

我的getText()僅適用在第一個預標籤上。因此沒有其他線路。

我也離不開你的意見(inneHTML睜開雙眼)

非常感謝您

相關問題